home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac 1993 September / September 93.iso / Archives / Utilities / Quicktime / QuickTime 1.6 Tech Note < prev    next >
Encoding:
Text File  |  1993-04-25  |  115.6 KB  |  206 lines  |  [TEXT/EDIT]

  1. QuickTime 1.6 FeaturesQuickTime    QuickTime 1.6            April, 1993This note is a technical discussion of the changes between QuickTime 1.5 and QuickTime 1.6. QuickTime 1.6 introduces some new features, and is more reliable than other QuickTime versions. The note also discusses the new features of QuickTime 1.6's Component Manager.Topics•    QuickTime 1.6 Features:         Describes how to access the new features.•    Component Manager 3.0 Features:     Describes how to access the new features.•    QuickTime 1.6 Bug Fixes:         Describes the bug fixes.QuickTime 1.6 FeaturesThe new features of QuickTime 1.6 are fully described in this note. These new features can be logically divided into two sections: "Features You Get For Free" and "Features You Get With Some Code." This documentation assumes the reader is QuickTime-literate. If this documentation does not suffice, refer to Inside Macintosh: QuickTime and Inside Macintosh: QuickTime Components which are currently available from APDA. In addition, most QuickTime questions are answered through rummaging through the sample code and/or applications on the QuickTime 1.5 CD. Also, the QuickTime 1.0 CD serves as an excellent reference.Features You Get For FreeThis section describes the features of QuickTime 1.6 which are added transparently to QuickTime. In general, your application will not have to do anything to your application for these features. But the user may have to install a specific extension and/or have the appropriate equipment. QuickTime 1.6 exploits these extensions: Sound Manager, Macintosh Easy Open, and ColorSync. In addition, it exploits the CD ROM 300(i), grayscale PowerBooks, Macintosh LC II class machines, Quadras, and stereo output devices. The exact nature of the exploitation is discussed in the various sections below.Reduced Memory FootprintQuickTime 1.6 code has been segmented. QuickTime's code segmentation allows unused code segments to be unloaded when not in use. QuickTime 1.6 uses less than 18k when installed whereas QuickTime 1.5 used approximately 160k.Because of this segmentation, substantially less memory is required for movie playback. If applications are not using a particular functionality, the corresponding code segments may be unloaded. For example, movie editing code will not be loaded unless the movie application requires it. Sound Manager 3.0 SupportQuickTime 1.6 is released with the new Sound Manager, Version 3.0. Since the new Sound Manager completely replaces the existing Sound Manager, it will work with all versions of QuickTime and all existing applications.  If the Sound Manager 3.0 is installed, QuickTime 1.6 will take advantage of it's new features.You can use QuickTime with the Sound Manager 3.0 in the following ways:•  Spit multiple sound tracks into one sound resourceThe best feature of the new Sound Manager is the ability to mix multiple sound tracks into one sound resource.• Play sound more efficientlyThe new Sound Manager lessens the load on the CPU for sound. As a rule of thumb, you will be able to get one extra frame per second for video playback.• Support alternate sound output devicesThis allows you to hook up hardware to your Macintosh for CD quality 16-bit 44 kHz stereo sound output.• Allow better control over multiple sound channelsWith Sound Manager 3.0, sound overdriving is now possible. By setting the movie volume above 1.0, the sound will actually be overdriven. •    Support true balance control•    Handle sound mixing better, which improves the quality of multiple sound track playback•    Use the new Sound Control PanelCompact Video EnhancementCompact Video playback to 16 bit destinations (thousands of colors) is now higher quality. The dithering algorithm has been significantly improved.Audio CD ImportA Movie Import component has been provided which allows you to open Audio CD tracks from QuickTime’s Standard File Preview dialog, just as you could open PICS and AIFF files with QuickTime 1.5. If you have a Apple CD 300 or CD 300i drive, you can use QuickTime 1.6 to convert tracks of your favorite audio CD directly into QuickTime movies. Figure 1. When you try to open an audio track on a CD 300(i), the Open button will change to a Convert… button. When you click this button, the Audio CD Import Options dialog will pop up. With this dialog, you can configure the sound settings of the movie. The rate, size, and channel can be specified for the movie.  In addition, you can select the portion of the track which should become a movie. You can select the start time and end time for the track. You can play your selection to be sure you have the selection you want.Text Track ExportA Text Movie Export component lets you easily extract text from movies. With Macintosh Easy Open installed, you can copy a series of text frames from a movie, and paste them directly into any application that supports text, such as MPW.Macintosh Easy Open SupportQuickTime 1.6 fully supports Macintosh Easy Open. Macintosh Easy Open is an Apple  system extension which provides document and clipboard translation for all applications. If a user has Macintosh Easy Open installed in combination with QuickTime 1.6, then they can copy and paste various media formats without thought.QuickTime 1.5 contained translation components for importing and exporting movie data from files and the clipboard. QuickTime 1.6 provides a Macintosh Easy Open translation component which makes all QuickTime movie import/export components work automatically with non-QuickTime-aware applications. For example, you can paste a sound track into a Sound Editing application, and it will translate the format from a QuickTime sound movie to a sound file.QuickTime 1.6 includes support for importing sound, PICTs, and PICS. It also supports exporting movies to PICT and sound. Additional MovieImport and MovieExport components can be found on the QuickTime 1.5 Developer CD in the Sample Components folder.Tear-free Movie PlaybackSupport has been added to the Image Compression Manager to reduce the tearing that is visible when playing back movies with large amounts of motion. The feature only works on machines with fast screen access, so it isn’t usually enabled for NuBus video cards. Typically, better tear-free movie playback will be seen on Compact Video movies in 16-bit on a Quadra. A good movie to look to see the improvement is the beginning of “Everybody Loves Me But You” on the QuickTime 1.5 Developer CD.PowerBook Movie Playback EnhancementsThe PowerBooks which use 4-bit gray scale (PowerBook 160, 180, Duo 210, Duo 230) are supported using new fast dithering. All decompressors transparently take advantage of this fast dithering.YUV CodecA YUV Compressor/Decompressor Component has been added to QuickTime 1.6. It stores data in YUV 4:2:2 format. The compression algorithm is not lossless, but the image quality is extremely high. The compression ratio is 2:1. It does not support frame differencing. It is useful with certain video input solutions. In addition, it is also useful as an intermediate storage format if you are applying multiple effects or transitions to an image.By default, YUV does not appear in the Standard Compression dialog. If you hold down the option key when clicking on the compressor list to display the complete list, it will appear.Features You Get With Some CodeThis section describes the features of QuickTime 1.6 which are NOT added transparently to QuickTime. Your application will need new code to take advantage of them. In this section, the use of these features are explained.Movie Toolbox EnhancementsThe Movie Toolbox has three new calls, and two new flags. First, we will talk about the new flag. When using either PasteHandleIntoMovie or ConvertFileToMovieFile to import data into a movie, you can now set the showUserSettingsDialog flag. This will cause the user settings dialog for that import operation to be displayed, if there is one. For example, when importing a picture, this would cause the Standard Compression dialog to be displayed so the compression method could be selected.    showUserSettingsDialog = 2hintsHighQuality is a new flag to the SetMoviePlayHints and SetMediaPlayHints routines. It specifies that the given movie or media should render at the highest quality. Rendering at highest quality may take considerably more time and memory. Therefore, this mode is typically not appropriate for real time playback, but is very useful for recompressing as it can generate higher quality images.    hintsHighQuality = 1<<8            The high quality mode can be used with other media handlers as well. For example, the Video Media Handler turns off fast dithering and allows high quality dithering. Now we will introduce the three new Movie Toolbox calls.SetMovieDrawingCompleteProcSetMovieDrawingCompleteProc lets you set a call back procedure that is called after a Movie has drawn in one or more of its tracks. In this way, your application can be aware of when QuickTime has drawn frames, and when it hasn’t. This information is very useful when combined with SetTrackGWorld (see below).pascal void SetMovieDrawingCompleteProc(Movie theMovie, MovieDrawingCompleteProcPtr proc, long refCon)theMovie    The Movie to set the proc on.proc    Your call back procedure, or nil to remove it.refCon    Value to pass to your call back procedure.typedef pascal OSErr (*MovieDrawingCompleteProcPtr)(Movie theMovie, long refCon);Errors invalidMovie     -2010    Your movie reference is bad.SetTrackGWorldSetTrackGWorld lets you force a track to draw into a particular GWorld. This GWorld may be different from that of the entire movie. After the track has drawn, it calls your transfer procedure to copy the track to the actual movie GWorld. When your transfer procedure is set, the current GWorld is set to the correct destination. You can also install a transfer procedure and set the GWorld to nil. This will result in your transfer procedure being called only as a notification that the track has drawn -- no transfer needs to take place.pascal void SetTrackGWorld(Track theTrack, CGrafPtr port, GDHandle gdh, TrackTransferProc proc, long refCon)theTrack    The track to set the proc to.port    The port for the track to draw to, or nil to use the Movie’s GWorld.gdh    GDevice associated with the port.proc    Returns pointer to your transfer procedure, or nil to remove it.refCon     Value to pass to your tranfer procedure.typedef pascal OSErr (*TrackTransferProc)(Track t, long refCon);Errors invalidMovie     -2009    Your track reference is bad.GetMovieCoverProcsGetMovieCoverProcs lets you retrieve the cover procs that you set with SetMovieCoverProcs.pascal OSErr GetMovieCoverProcs(Movie theMovie, MovieRgnCoverProc *uncoverProc, MovieRgnCoverProc *coverProc, long *refcon)Movie    Movie reference.MovieRgnCoverProc    Returns the uncover proc for the movie.MovieRgnCoverProc    Returns the cover proc for the movie.long    Returns the refcon for the cover procedures.Errors invalidMovie     -2010    Your movie reference is bad.    Image Compression EnhancementsThe Image Compression has four new calls, and it's performance has been increased. Both the Photo CD and JPEG decompressors have been upgraded to directly support  the clipping of images. This greatly decreases the time necessary to display large images. In particular, it makes it much easier to work with high resolution Photo CD images. Now, we will discuss the four new calls.SetSequenceProgressProcSetSequenceProgressProc allows you to set a progress procedure on a Compression or Decompression Sequence, just as in the past you could have a progress procedure when compressing or decompressing a still image. pascal OSErr SetSequenceProgressProc(ImageSequence seqID, ProgressProcRecord *progressProc)seqID    Sequence identifier.progressProc    Pointer to a record containing information about the application's progress proc.The Image Compression Manager has 3 additional calls which allow applications to zoom a monitor. They are considered low-level calls (comparable to SetEntries) that should only be used when playing back QuickTime movies in a controlled environment with no user interaction.  Also, because this capability is not present on all machines, applications should not depend on its availability.The new calls provide a standard way for developers to access the 2x mode of a user’s monitor for playback. Effectively, this allows you to have full screen Compact Video playback on low end Macintosh computers.Hardware 200% resize is currently available only on the Macintosh LC II, IIvx, IIvi, Performa 400, Performa 600, and Color Classic in 16-bit (thousands of colors) display mode on the 12-inch (512 x 384 pixels) monitors. In the future, other graphic devices may take advantage of it.To implement this functionality, the Image Compression Manager actually make calls to the Video Driver for the given device. Video card manufacturers interested in supporting this functionality in their cards should link DEVSUPPORT for more information.GDHasScaleGDHasScale returns the closest possible scaling that a particular screen device can be set to in a given pixel depth. It returns scaling information for a particular GDevice for a requested depth. It allows you to query a GDevice without actually changing it. For example, if you specify 0x20000, but the GDevice does not support it, GDHasScale will return with noErr, and a scale of 0x10000. Remember, it checks for a supported depth, so your requested depth must be supported by the GDevice. GDHasScale references the video driver through the graphics device structure.For multiple screens, see "Multiple Screen Revealed" in develop 10 to find out how to walk the GDeviceList.pascal OSErr GDHasScale(GDHandle gdh,short depth,Fixed *scale)gdh    a handle to a screen graphics device. depth    pixel depth of screen device.  Use this field to specify which pixel depth that scaling information should returned for.scale    a pointer to a fixed point scale value.  On input, this field should be set to the desired scale value.  On output, this field will contain the closest scale available for the given depth.  A scale of 0x10000 indicates normal size, 0x20000 indicates double size, etc.Errors cDepthErr    The requested depth is not supported.cDevErr    Not a screen device.controlErr    Video driver can not respond to this call.GDGetScaleGDGetScale returns the current scale of the given screen graphics device.pascal OSErr GDGetScale(GDHandle gdh,Fixed *scale,short *flags)gdh    a handle to a screen graphics device.scale    pointer to a fixed point field to hold the scale resultflags    pointer to a short.  It returns the status parameter flags for the video driver. For now, zero is always returned in this field.Errors cDevErr    Not a screen device.controlErr    Video driver can not respond to this call.GDSetScaleGDSetScale sets a screen graphics device to a new scale.pascal OSErr GDSetScale(GDHandle gdh,Fixed scale,short flags)gdh    a handle to a screen graphics device.scale    a fixed point scale value.flags    always pass zero.Errors cDevErr    Not a screen device.controlErr    Video driver can not respond to this call.Base Media Handler EnhancementsThe Base Media Handler interface has been extended with 3 new calls, and a new flag. These features were added to provide high quality movie playback. The text media handler takes advantage of these new calls, and provides built-in support for anti-aliased text. It is achieved through a playback hint to the base media handler, which the Apple Text Media Handler derives.  This hint, hintsHighQuality, has been discussed in the Movie Toolbox Enhancements section above.The MediaSetHints and MediaGetOffscreenBufferSize routines were added to the Derived Media Handler interface to support high quality mode. Since the Apple Text Media Handler derives the base media handler, it can use these new calls to support anti-aliased text.MediaSetHintsWhen SetMoviePlayHints or SetMediaPlayHints is called by an application, your media handler’s MediaSetHints routine is called. This allows you to implement appropriate behavior for the various media hints such as scrub mode and high quality mode.pascal ComponentResult MediaSetHints (ComponentInstance ci, long hints)ci    Component instance of a base media handler.hints    All hint bits the currently apply to the given media.Errors badComponentInstance    0x80008001    Get a new component instanceMediaGetOffscreenBufferSize Before the Base Media Handler allocates an offscreen buffer for your Derived Media Handler, it calls your MediaGetOffscreenBufferSize routine to allow your media handler to chose the dimensions of the buffer. The depth and color table that will be used for the buffer are also passed. When you are called the rectBounds parameter specifies the size that the Base Media Handler will use for your offscreen by default. You can modify this as appropriate before returning. This capability is useful if your media handler can only draw at particular sizes. It is also useful for implementing anti-aliased drawing as you can request a buffer that is larger than your destination area, and have the Base Media Handler scale the image down for you. pascal ComponentResult MediaGetOffscreenBufferSize (ComponentInstance ci, Rect *rectBounds, short depth, CTabHandle ctab)ci    Component instance of a base media handler.Rect     The boundaries of your off-screen buffer.depth    Depth of the offscreen.ctab    Color table associated with off-screen. You can set it to nil.Errors badComponentInstance    0x80008001    Get a new component instance.MediaGetNameMediaGetName let's you retrieve the name of the media type. For example, the video media handler will return the string "Video".pascal ComponentResult MediaGetName(MediaHandler mh, Str255 name, long requestedLanguage, long *actualLanguage )ComponentInstance    The base media handler instance.Str255    The name of the media type.Long    A bunch of flags.Errors badComponentInstance    0x80008001    Get a new component instance.Text Media Handler EnhancementsThe text media handler interface includes 6 new flags, and one new routine. The flags let you control the behavior of the text media handler. The display flags are used in conjunction with the AddTESample and AddTextSample routines. The display flags are passed in the displayFlags parameter.dfContinuousScroll is a display flag which tells the Apple Text Media Handler to let new samples cause previous samples to scroll out.dfFlowHoriz is a display flag which tells the Apple Text Media Handler to let horizontally scrolled text to flow within the text box. This behavior contrasts with letting text flow as if the text box had no right edge.dfDropShadow is a display flag which tells the Apple Text Media Handler to support true drop shadows. Using SetTextSampleData, the position and translucency of the drop shadow is under application control.dfAntiAlias is a display flag which tells the Apple Text Media handler to attempt to display text anti-aliased.dfKeyedText is a display flag which tells the Apple Text Media handler to render text over the background without drawing the background color. This technique is otherwise known as "Masked Text."enum {dfContinuousScroll     = 1<<9, dfFlowHoriz         = 1<<10,dfDropShadow         = 1<<12,    dfAntiAlias         = 1<<13,    dfKeyedText         = 1<<14};findTextUseOffset is a new find text flag which instructs FindNextText to look at the value pointed to by the offset parameter and start the search at that offset into the text sample indicated by startTime. This allows you to continue a text search from within a given sample, so that multiple occurrences of the search string can be found within a single sample.findTextUseOffset = 16; SetTextSampleDataSetTextSampleData allows you to set values prior to calling AddTextSample or AddTESample. Two types are currently supported: 'drpo' and 'drpt'. The first type, 'drpo', is the drop shadow offset. Pass the address of a point for the data parameter. 'drpt' is the drop shadow translucency. Pass a value from 0 to 255, where 0 is the lightest and 256 is the darkest.pascal ComponentResult SetTextSampleData(MediaHandler mh, void *data, OSType dataType)mh    Reference to the text media handler. Could use GetMediaHandler.data    Pointer to data, defined by dataType parameter. handleType    Sets the type of data in the handle. For now, either 'drpo' or 'drpt'.Errors badComponentInstance    0x80008001    Your media handler reference is hosed.Here is some sample pseudo-code (it might not compile):short     trans = 127;Point    dropOffset;dropOffset.h = dropOffset.v = 4;SetSampleData(mh,(void *)&dropOffset,'drpo');SetSampleData(mh,(void *)&trans,'drpt');Be sure to turn on the dfDropShadow display flag when you call AddTextSample or AddTESample.Import/Export Component EnhancementsExport components have one new flag, one new error, two new functions, one new data structure, one new component, and an enhancement to the Sound Export component. The Text Movie export component was introduced above. Import components have one new function. The Audio CD Movie Import component was already introduced.canMovieExportAuxDataHandle is a movie export component flag. A Movie Export Component that supports the MovieExportGetAuxiliaryData call should also now set the canMovieExportAuxDataHandle flag in its ComponentFlags.    canMovieExportAuxDataHandle = 128The error auxiliaryExportDataUnavailable has been added. It will be returned by a Movie Export Component when MovieExportGetAuxiliaryData is called requesting a type of auxiliary data that the component cannot generate.     auxiliaryExportDataUnavailable = -2058The Sound Movie Export component has been updated to take advantage of the new Sound Manager. Previously, only the first sound track in the movie was exported. Now sound tracks are mixed together before being exported. If your application wants to take advantage of the sound mixing, you can use PutMovieIntoTypedHandle. It will take advantage of the export component. Furthermore, you can now specify the format of the exported sound, so you can convert 16 bit sound to 8 bit sound, or reduce stereo to mono.MovieExportSetSampleDescriptionMovieExportSetSampleDescription allows an application to request the format of the exported data, the routine MovieExportSetSampleDescription has been added. This call is currently supported by the Movie Export Sound Component.pascal ComponentResult MovieExportSetSampleDescription(MovieImportComponent  ci,    SampleDescriptionHandle desc, OSType mediaType)ci    Component Instance of movie import component.desc    Handle to a valid QuickTime sample description.mediaType    The type of the media that the sample description is from.Errors badComponentInstance    0x80008001    Get a new component instance.MovieImportGetAuxiliaryDataTypeMovieImportGetAuxiliaryDataType should return the type of the auxiliary data that it can accept. This is useful if you are interested with import components directly. For example, if you call the text import component with this call, it will indicate that it can accept 'styl' information.pascal ComponentResult MovieImportGetAuxiliaryDataType(MovieImportComponent  ci,     OSType *auxType)ci    The movie import component instance. Retrieve it with OpenDefaultComponent or OpenComponent.auxType    Pointer to the type of auxiliary data it can import. For example, a text import component can bring in 'text' data. But, if it says it can return 'styl', then it will import the style information as well.Errors badComponentInstance    0x80008001    Your movie import component reference is bad.Here is a new data structure for the text export component. This data is useful after a text track has been exported. An application may want to know the way the text was stored as a track.typedef struct {    long        displayFlags;    long        textJustification;    RGBColor    bgColor;    Rect        textBox;    short        beginHilite;    short        endHilite;    RGBColor    hiliteColor;    Boolean    doHiliteColor;    TimeValue    scrollDelayDur;    Point        dropShadowOffset;    short        dropShadowTransparency;} TextDisplayData;TextExportGetDisplayDataTextExportGetDisplayData returns the text display data for the text sample that was last exported by the given text export component. After exporting text from a text track, it is often useful to find out about the text track characteristics. This data structure contains this extra information.pascal ComponentResult TextExportGetDisplayData(TextExportComponent  ci,     TextDisplayData *data)ci    The text export component instance. Retrieve it with OpenDefaultComponent or OpenComponent.displayData    Pointer to the text display data.Errors badComponentInstance    0x80008001    Your movie import component reference is bad.ColorSyncColorSync is an extension for Macintosh providing a platform for consistent color reproduction between widely varying output devices. Color Matching ability was added to the Image Compression Manager DrawPicture calls. Accurate color reproduction of images (not movies) is made easier with QuickTime’s flexible DrawPicture calls.  To enable color matching you simply set the useColorMatching flag in the flags parameter to these calls. You can set the flag even when ColorSync is not installed, although it will be ignored.    useColorMatching = 4Sequence Grabber EnhancementThe Sequence Grabber component has just one flag added to it. grabPictCurrentImage is a new flag to the SGGrabPict call. It provides the fastest possible image capture, but may fail under certain circumstances. This failure is not fatal; it just will not return a picture. The routine does not pause the current preview or grab the next frame. It causes the currently displayed image to be captured. It is a good idea to call SGPause yourself before calling SGGrabPict with this flag.    grabPictCurrentImage = 4Image Codec EnhancementThe interface for image codecs has three new functions and one new flag defined. codecConditionFirstScreen is a new  codec condition flag to the ImageCodec.h file.    #define codecConditionFirstScreen    (1L<<12)The Standard Compression Dialog now provides Compressor Components with the option of displaying their own settings within the dialog. If a compressor supports the dialog, an additional button will appear. The compressors settings are saved with the standard compressor settings when the SCGetInfo call is used with the scCodecSettingsType flag. The codec can implement the functionality using the following three routines.  CDRequestSettingsCDRequestSettings allows the display of a dialog of additional compression settings specific to the codec. This information is stored in a settings handle. The codec can store whatever data in any format wants in the settings handle and resize it accordingly.  It should store some type of tag/version information that it can use to verify that the data belongs to the codec.  The codec should NOT dispose the handle.pascal ComponentResult CDRequestSettings(ComponentInstance ci,  Handle settings, Rect *rp, ModalFilterProcPtr filterProc)ci    Component instance of codec.settings    Handle of data specific to the codec.  If the handle is empty, the codec should use some type of default settings.  rp    Pointer to rectangle giving the coordinates of the Standard Compression dialog in screen coordinates.  The codec can use this to position its dialog in the same area of the screen.filterProc    A pointer to modal dialog filter proc that the codec must either pass to ModalDialog or call at the beginning of the codec dialog's filter.  This proc gives the calling application and Standard Compression a chance to process update events.CDGetSettingsCDGetSettings allows a codec to get the settings chosen by a user. From this call, the codec should return its current internal settings.  If there are no current settings or the settings are the same as the defaults, the codec can set the handle to empty.pascal ComponentResult CDGetSettings(ComponentInstance ci,  Handle settings)ci    Component instance of codec.settings    A handle that the codec should resize and fill in with the current internal settings.  It should be resized to empty if there are no current internal settings.CDSetSettingsCDSetSettings allows a codec to set the settings of the optional dialog. Set the codecs current internal settings to the state specified in the settings handle.  The codec should always do a validity check on the contents of the handle so that invalid settings are never used.pascal ComponentResult CDSetSettings(ComponentInstance ci,  Handle settings)ci    Component Instance of movie import component.settings    A handle to internal settings original returned by either the CDRequestSettings or CDGetSettings calls.  The codec should set it's internal settings to match those of the settings handle.  Because the codec does not own the handle, it should not dispose of it, and should only copy its contents, not the handle itself.  If the settings handle passed in is empty, the codec should set its internal settings to a default state.New Component Manager FeaturesThe Component Manager in QuickTime 1.6 has some new features. The result returned for the selector, gestaltComponentMgr, will be 3, indicating version number 3 of the Component Manager. It has added the ability to automatically resolve conflicts between different versions of the same Component. It will ensure that only the most recent version of a given component is actually registered. In addition, the Component Manager now supports Icon Suites for a Component, so a Component’s icon no longer has to be just black and white. The ComponentResource data structure can now have an optional extension. This extension defines additional information about the Component. The data structure is shown below.struct ComponentResourceExtension {    long    componentVersion;        /* version of Component */    long    componentRegisterFlags;    /* flags for registration */    short    componentIconSuite;        /* resource id of Icon Suite */};typedef struct ComponentResourceExtension ComponentResourceExtension;The ComponentResourceExtension is appended to the end of existing ComponentResource structures. The Component Manager determines if it is present by examining the size of the resource.The componentVersion field contains the version number of the component. This should be identical to the value returned by GetComponentVersion. For convenience, if this value is set to 0, the component is called to get the version. This is useful during development. The version number stored in the ComponentResourceExtension is used by the Component Manager to avoid having to load and call the Component to retrieve the Component’s version during startup.The componentRegisterFlags allow you to define additional register information. These flags are shown below. // Component Resource Extension flagsenum {    componentDoAutoVersion = 1<<0,    componentWantsUnregister = 1<<1,    componentAutoVersionIncludeFlags = 1<<2};The componentDoAutoVersion flag tells the Component Manager that you only want your Component registered if there is no later version available. If there is an older version of the Component installed, it will be unregistered. If an older version of the same Component attempts to register after you, it will be immediately unregistered. Further, if a newer version of the same Component registers after you, you will automatically be unregistered. Using the automatic version control feature of the Component Manager allows you to make sure that only the most recent version of your software is running on a given machine, regardless of how many versions many be installed.The componentWantsUnregister flag indicates that your Component wants to be called when it is unregistered. This is useful if your component allocates global memory at register time, for example. The prototype of the unregister message is identical to the register message. If your component has never been opened, its unregister message will not be called. The routine selector for unregister is given below.The componentAutoVersionIncludeFlags flag tells the Component Manager to use the component flags as criteria for it's component search. If a component wants automatic version control, the Component Manager has to search for similar components. Normally, the Component Manager only searches for another component using the type, subType, and manufacturer fields of a ComponentDescription record. This flag tells the Component Manager to include the componentFlags in its search.#define kComponentUnregisterSelect      -7 Finally, the componentIconSuite field allows you to provide the resource id of a System 7 Icon Suite. If this field is 0, it indicates that there is no icon suite. GetComponentIconSuiteGetComponentIconSuite returns an Icon Suite for the given Component. This call only works on System 7 or later. If called on System 6, it returns an error. If the Component doesn’t have an Icon Suite but does have a Component Icon (as returned by GetComponentInfo), GetComponentIconSuite creates an Icon Suite containing just the black and white Component Icon. In this way, you can use GetComponentIconSuite without regard to whether or not a Component has an Icon Suite or just simply a Component Icon.For more details on Icon Suites, see the Tech Note on Icon Suites (M.IM.IconDrawing), "Drawing Icons the System 7 Way".pascal OSErr GetComponentIconSuite(Component aComponent, Handle *iconSuite)aComponent    Component id, retrieved with FindNextComponent.iconSuite    Pointer to the icon suite you will receive.Errors invalidComponentID  -3000    Component reference is not valid.QuickTime 1.6 Bug FixesQuickTime 1.6 fixes all known bugs in QuickTime 1.5. Many of these bugs are listed below.Movie Toolbox• The Movie Toolbox interesting time calls have been substantially improved. The values returned are much more consistant and accurate.• GetMoviePict has two major improvements:GetMoviePict  no longer fails on certain Compact Video movies.GetMoviePict now reports out of memory errors rather than returning empty pictures when memory is low.• UpdateMovieResource has been fixed for single fork files.• Editing movie's with alternate tracks no longer causes duplicate tracks to be created.• Movie Uncover Procedures have been significantly improved. If a movie with tracks that are semi-transparent has a Movie Uncover procedure set (by SetMovieCoverProcs), the uncover procedure is now called before each frame to fill/erase the background. Previously the Movie Toolbox performed the erase, which limited a cover procedure aware application's options.• The dialog sequence that appears when a movie data file is lost has been reworked to eliminate the "This is not a valid movie file" dialog.• Fixed problem with deactivating and reactivating Compact Video movies that caused “shimmering” effects in the image.• GetMoviePosterPict now properly handles tracks which are only in the poster and not in the movie.• Movies played in loop mode using the Movie Controller no longer briefly pause when they jump from the end back to the beginning of the movie.Movie Controller• The Movie Controller performs much smarter drawing, so it takes up less time during movie playback.• The Movie Controller no longer leaves the port clip changed after drawing the badge.Movie Import/Export• The Import AIFF Sound File to Movie component now always imports the entire file.• The PICT and PICS import components no longer scale down images larger than the screen.Text Media Handler• When multi-line text is grown, lines after line 1 were not displayed. The bug did not occur when grown exactly 2x. It is now fixed.• Empty text samples sometimes caused the Text Media Handler to lose track of subsequent text size. It is now fixed.• FindText did not do "case insensitive" searches properly. Furthermore it tried to dispose of the text string that was passed in. It is now fixed.• FindText "wrap around" search did not always work properly. It now does.• Hilite text samples did not always display properly. They now do.• If the track contained multiple text descriptions, performance was sometimes severely degraded -- not anymore.• Text clipping and scrolling is now much more reliable.Image Compression Manager•    The AlignWindow call has been fixed to respect vertical repositioning.Compact Video•    In some cases, the Compact Video compressor allowed the data rate to exceed the limit set by the calling application, causing playback problems from CD.  QuickTime 1.6 fixes this bug.•    Decompressing gray scale Compact Video data to an 8-bit color destination no longer crashes.Photo CD Decompressor•    More accurate colors in decompression are displayed.Standard Compression•    If scAllowZeroFrameRate is true, default to 0 frame rate.•    The key frame rate now updates correctly when changed from hook procedure.•    Rate-constrain item checked if non-zero default value present.Sequence Grabber•    Sound wouldn’t get restarted or turned off correctly if the record bit wasn’t set in its channel usage. It is now fixed.•    Video panel does not bus error if the digitizer doesn't support hue.Component Manager• The Component Manager no longer changes the current resource file when loading a Component.• The Component Manager now tracks files using File ID's when possible, rather than FSSpec's.•    Fixed obscure boot problem that would hang the machine when a component was called to register and the system heap was extremely low on free memory.•    It is now OK to pass an empty handle to GetComponentInfo. This is helpful, since it can return them.Further Reference:•    Inside Macintosh, QuickTime•    Inside Macintosh, QuickTime Components‡◊#ˇ ˇˇˇˇ#◊°d WORDS †å°d WORDR…†Ç 
  2. 66àˇ
  3.     0Ià:µú9"Lj    ˇˇˇˇˇˇˇˇ#†ƒ°d
  4. ONLNf˛†å°d1drw2…-·_ġˇˇˇˇˇè°ñ x°ddrw2:°ddrw2:$°d4drw2:°öˇ˙ó@†ò,Times.WIQkWIQk+9INew Technical Notes†ô°ddrw2:°„†ó°d1drw2eÙġˇˇˇˇˇP°ñ x°ddrw2:°ddrw2:$°d4drw2:°öˇ˚ÄE¿†ò!(ÇqDeveloper Support†ô°ddrw2:°„†ó°d`drw2-ÔˇˇˇˇˇˇKÔ- Z  m¯m6°d1drw2 ¿˙ÈˇˇˇˇˇˇK°ñ x°ddrw2:°ddrw2:$°d4drw2:0°öˇÙĆò0(\À†ô°ddrw2:°„†ó°d1drw2ÔÊ˙ˇˇˇˇˇˇ°ñ x°ddrw2:°ddrw2:$°d4drw2:    °öˇ˝Ä†ò    l+&    ®†ô°ddrw2:°„†ó°d1drw2Â-¯yˇˇˇˇˇˇ°ñ x°ddrw2:°ddrw2:$°d4drw2:°öˇ˚Ä%†òBÄ(a8    Macintosh†ô°ddrw2:°„†ó†ç°ddrw2D†É°dWORD†ç
  5. d.°dONLNdvà“(£6QuickTime 1.6 Features°dONLNdñ§\*    QuickTime°dONLNd!ñŧ⁄(¿üQuickTime 1.6 °dONLNd2∞•º⁄+$ April, 1993°dONLNd>»‘»(6'This note is a technical discussion of °dONLNde»»‘⁄)∞4the changes between QuickTime 1.5 and QuickTime 1.6.°dONLNdö‘‡f(¸6QuickTime 1.6 °dONLNd®‘f‡⁄)NGintroduces some new features, and is more reliable than other QuickTime°dONLNd‡ÏÀ(6Xversions. The note also discusses the new features of QuickTime 1.6's Component Manager.°dONLNdI¯;*Topics°dONLNdP37+ •°dONLNdR<¥)    QuickTime 1.6 Features: °dONLNdlµ)¥)Describes how to access the new features.°dONLNdñ37(8Q•°dONLNdò<„)     Component Manager 3.0 Features: °dONLNdπµ)¥)Describes how to access the new features.°dONLNd„3(7(DQ•°dONLNdÂ<(Ω)    QuickTime 1.6 Bug Fixes: °dONLNd(b)¥Describes the bug fixes. _4_˘°dONLNd_q“(å6QuickTime 1.6 Features ê4ê˘ °dONLNd0ã”*&The new features of QuickTime 1.6 are °dONLNdV”ã⁄)ª7fully described in this note. These new features can be°dONLNdéãóh(≥6logically divided °dONLNd†ãhó⁄)PIinto two sections: "Features You Get For Free" and "Features You Get With°dONLNdÍó£W(ø6 Some Code."°dONLNd˜ØªP*@This documentation assumes the reader is QuickTime-literate. If °dONLNd7ØPª⁄(◊nthis documentation does not°dONLNdSª«V(„6suffice, refer °dONLNdbªV«c)>to °dONLNdeªc«Ú)Inside Macintosh: QuickTime°dONLNdĪګ )è and °dONLNdÖª «⁄)&Inside Macintosh: QuickTime Components°dONLNd¨«”2(Ô6;which are currently available from APDA. In addition, most °dONLNdÁ«2”⁄(ÔP QuickTime questions are answered°dONLNd”fl(˚61through rummaging through the sample code and/or °dONLNd9”fl⁄)ˇ%applications on the QuickTime 1.5 CD.°dONLNd_flÎ7(6<Also, the QuickTime 1.0 CD serves as an excellent reference.°dONLNdú˜    Í*Features You Get For Free (4(˘ °dONLNd∂#3*This °dONLNdª3#⁄)Psection describes the features of QuickTime 1.6 which are added transparently to°dONLNd #/(K6-QuickTime. In general, your application will °dONLNd9#/⁄)ÿ/not have to do anything to your application for°dONLNdi/;…(W6&these features. But the user may have °dONLNdè/…;⁄)±;to install a specific extension and/or have the appropriate°dONLNdÀ;Gæ(c6Requipment. QuickTime 1.6 exploits these extensions: Sound Manager, Macintosh Easy °dONLNd;æG⁄(c‹Open,°dONLNd#GS(o63and ColorSync. In addition, it exploits the CD ROM °dONLNdVGS⁄)˙'300(i), grayscale PowerBooks, Macintosh°dONLNd~S_ó({6RLC II class machines, Quadras, and stereo output devices. The exact nature of the °dONLNd–Só_⁄({µexploitation is°dONLNd‡_k”(á6(discussed in the various sections below.ˇ°¿Ù%%DSIDICT:_cvcurrentdict /bu known {bu}ifuserdict /_cv known not{userdict /_cv 30 dict put}if_cv begin/bdf{bind def}bind defcurrentscreen/cs exch def/ca exch def/cf exch def/setcmykcolor where{/setcmykcolor get /cvcmyk exch def}{/cvcmyk{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat setrgbcolor pop}bdf }ifelse/ss{//cf //ca //cs setscreen}bdf/stg{ss setgray}bdf/strgb{ss setrgbcolor}bdf/stcmyk{ss cvcmyk}bdf/min1{dup 0 eq{pop 1}if}bdfendcurrentdict /bn known {bn}if†ø∞◊#ˇ ˇˇˇˇ#◊ 
  6. d,Times
  7. .+6,Macintosh Technical Notes .4.˘°dONLNd(6¬*&Reduced Memory Footprint U4U˘ °dONLNdCO‘*WQuickTime 1.6 code has been segmented. QuickTime's code segmentation allows unused code°dONLNdqO[≈* Xsegments to be unloaded when not in use. QuickTime 1.6 uses less than 18k when installed°dONLNd [g* .whereas QuickTime 1.5 used approximately 160k.°dONLNd˘s¿*ZBecause of this segmentation, substantially less memory is required for movie playback. If°dONLNdTãÃ* ]applications are not using a particular functionality, the corresponding code segments may be°dONLNd≤ãóæ* Yunloaded. For example, movie editing code will not be loaded unless the movie application°dONLNd ó£J* requires it.°dONLNdª…ƒ*&Sound Manager 3.0 Support Ë4ˢ °dONLNd4÷‚€*'QuickTime 1.6 is released with the new °dONLNd[÷€‚⁄)√/Sound Manager, Version 3.0. Since the new Sound°dONLNdã‚Ó£(
  8. 6NManager completely replaces the existing Sound Manager, it will work with all °dONLNdŸ‚£Ó⁄(
  9. ¡ versions of°dONLNdÂÓ˙F(6?QuickTime and all existing applications.  If the Sound Manager °dONLNd$ÓF˙⁄(d3.0 is installed, QuickTime 1.6°dONLNdD˙Œ("6)will take advantage of it's new features.°dONLNdn}*GYou can use QuickTime with the Sound Manager 3.0 in the following ways:°dONLNd∂*!6+    5•  Spit multiple sound tracks into one sound resource°dONLNdÏ63B*+ 1The best feature of the new Sound Manager is the °dONLNd6*B⁄)˜$ability to mix multiple sound tracks°dONLNdBB3Nß(jQinto one sound resource.°dONLNd[Z!f™(Ç?• Play sound more efficiently°dONLNdyf3rñ+ GThe new Sound Manager lessens the load on the CPU for sound. As a rule °dONLNd¿fñr⁄(é¥of thumb, you°dONLNdŒr3~d(öQBwill be able to get one extra frame per second for video playback.°dONLNdä!ñfi(≤?(• Support alternate sound output devices°dONLNd:ñ3¢î+ EThis allows you to hook up hardware to your Macintosh for CD quality °dONLNdñî¢⁄(æ≤16-bit 44 kHz°dONLNdç¢3Æì( Qstereo sound output.°dONLNd¢∫!Δ(‚?3• Allow better control over multiple sound channels°dONLNd÷Δ3“t+ With Sound °dONLNd·Δt“⁄)ADManager 3.0, sound overdriving is now possible. By setting the movie°dONLNd&“3fi8(˙Q8volume above 1.0, the sound will actually be overdriven.°dONLNd`Í!ˆ%(?•°dONLNdbÍ*ˆØ)    Support true balance control°dONLNd!%(*?•°dONLNdÅ*Õ)    WHandle sound mixing better, which improves the quality of multiple sound track playback°dONLNdŸ!&%(B?•°dONLNd€*& )    Use the new Sound Control Panel°dONLNd˚>LÕ(h6Compact Video Enhancement k4k˘ °dONLNdYe°*RCompact Video playback to 16 bit destinations (thousands of colors) is now higher °dONLNdgY°e⁄(Åø quality. The°dONLNdteq(ç64dithering algorithm has been significantly improved. fl4fl˘
  10. *e2) of 18(ÚëQuickTime 1.6 Tech Noteˇ    ®◊#ˇ ˇˇˇˇ#◊ 
  11. d,Times
  12. .+6,Developer Technical Support(,Ã
  13. April 1993 .4.˘°dONLNd(6Ñ(R6Audio CD Import U4U˘ °dONLNdCOj*A Movie Import °dONLNdCjO⁄)RDcomponent has been provided which allows you to open Audio CD tracks°dONLNddO[°(w6from QuickTime’s Standard °dONLNd~O°[⁄)â?File Preview dialog, just as you could open PICS and AIFF files°dONLNdæ[g•(É6Mwith QuickTime 1.5. If you have a Apple CD 300 or CD 300i drive, you can use °dONLNd [•g⁄(É√    QuickTime°dONLNdgsé(è6O1.6 to convert tracks of your favorite audio CD directly into QuickTime movies.
  14. ûå¢,    Genevac¢Kyc¢Ky°dONLNdˇˇ+©∫QuickTime™ and a°dONLNdˇˇ(UœGraphics decompressor°dONLNdˇˇ(a∏! are needed to see this picture
  15. d°dONLNdf¸
  16. R(&6
  17. Figure 1.  °dONLNdp˛R
  18. ):'When you try to open an audio track on °dONLNdó˛
  19. ⁄)ø(a CD 300(i), the Open button will change°dONLNd¿
  20. …(26Uto a Convert… button. When you click this button, the Audio CD Import Options dialog °dONLNd
  21. …⁄(2Áwill°dONLNd"(>66pop up. With this dialog, you can configure the sound °dONLNdP"⁄(>7*settings of the movie. The rate, size, and°dONLNd{".ë(J6channel can be specified °dONLNdî"ë.⁄)yDfor the movie.  In addition, you can select the portion of the track°dONLNdŸ.:D(V6?which should become a movie. You can select the start time and °dONLNd.D:⁄(Vbend time for the track. You can°dONLNd8:F=(b6?play your selection to be sure you have the selection you want.°dONLNdxbpâ**Text Track Export è4è˘ °dONLNdä}â√*WA Text Movie Export component lets you easily extract text from movies. With Macintosh °dONLNd·}√â⁄(•·Easy°dONLNdÊâï÷(±6)Open installed, you can copy a series of °dONLNdâ÷ï⁄)æ6text frames from a movie, and paste them directly into°dONLNdFï°ˇ(Ω60any application that supports text, such as MPW. fl4fl˘
  22. *5QuickTime 1.6 Tech Note(Ú€3) of 18ˇî◊#ˇ ˇˇˇˇ#◊ 
  23. d,Times
  24. .+6,Macintosh Technical Notes .4.˘°dONLNd*8“*(Macintosh Easy Open Support W4W˘ °dONLNdEQR*
  25. QuickTime °dONLNd&ERQ⁄):G1.6 fully supports Macintosh Easy Open. Macintosh Easy Open is an Apple°dONLNdoQ]x(y6Gsystem extension which provides document and clipboard translation for °dONLNd∂Qx]⁄(yñall applications. If a°dONLNdÕ]iD(Ö6    user has °dONLNd÷]Di⁄),NMacintosh Easy Open installed in combination with QuickTime 1.6, then they can°dONLNd%iu(ë65copy and paste various media formats without thought.°dONLNd[Åç*/QuickTime 1.5 contained translation components °dONLNdäÅç⁄)Í+for importing and exporting movie data from°dONLNd∂çô8(µ6<files and the clipboard. QuickTime 1.6 provides a Macintosh °dONLNdÚç8ô⁄(µVEasy Open translation component°dONLNdô•™(¡6Lwhich makes all QuickTime movie import/export components work automatically °dONLNd^ô™•÷(¡»with non°dONLNdfô÷•⁄),-°dONLNdg•±(Õ63QuickTime-aware applications. For example, you can °dONLNdö•±⁄)˝(paste a sound track into a Sound Editing°dONLNd√±ΩΩ(Ÿ6[application, and it will translate the format from a QuickTime sound movie to a sound file.°dONLNd…’f*QuickTime 1.6 °dONLNd-…f’⁄)NGincludes support for importing sound, PICTs, and PICS. It also supports°dONLNdu’·^(˝6?exporting movies to PICT and sound. Additional MovieImport and °dONLNd¥’^·⁄(˝|MovieExport components°dONLNdÀ·Ì™(    6Ocan be found on the QuickTime 1.5 Developer CD in the Sample Components folder.°dONLNd¥*&Tear-free Movie Playback 242˘ °dONLNd4 ,w*FSupport has been added to the Image Compression Manager to reduce the °dONLNdz w,⁄(Hïtearing that is visible°dONLNdí,8»(T6$when playing back movies with large °dONLNd∂,»8⁄)∞5amounts of motion. The feature only works on machines°dONLNdÏ8DU(`6Ewith fast screen access, so it isn’t usually enabled for NuBus video °dONLNd18UD÷(`scards. Typically, better tear°dONLNdN8÷D⁄)Å-°dONLNdODPπ(l6!free movie playback will be seen °dONLNdpDπP⁄)°5on Compact Video movies in 16-bit on a Quadra. A good°dONLNd¶P\Ê(x6,movie to look to see the improvement is the °dONLNd“PÊ\⁄)Œ,beginning of “Everybody Loves Me But You” on°dONLNdˇ\h∫(Ñ6the QuickTime 1.5 Developer CD.°dONLNdÄé*&%PowerBook Movie Playback Enhancements ≠4≠˘ °dONLNdEõßÒ**The PowerBooks which use 4-bit gray scale °dONLNdoõÒß⁄)Ÿ*(PowerBook 160, 180, Duo 210, Duo 230) are°dONLNdöß≥(œ66supported using new fast dithering. All decompressors °dONLNd–ß≥⁄(œ:)transparently take advantage of this fast°dONLNd˙≥øE(€6
  26. dithering.°dONLNd◊Â_*&    YUV Codec 4˘ °dONLNdÚ˛Δ*A YUV Compressor/Decompressor °dONLNd-ÚΔ˛⁄)Æ4Component has been added to QuickTime 1.6. It stores°dONLNdb˛
  27. :(&6data in °dONLNdj˛:
  28. ⁄)"UYUV 4:2:2 format. The compression algorithm is not lossless, but the image quality is°dONLNd¿
  29. b(26Bextremely high. The compression ratio is 2:1. It does not support °dONLNd
  30. b⁄(2Äframe differencing. It is°dONLNd"(>6;useful with certain video input solutions. In addition, it °dONLNdW"⁄(>8)is also useful as an intermediate storage°dONLNdÅ".[(J6Gformat if you are applying multiple effects or transitions to an image.°dONLNd…:F|*GBy default, YUV does not appear in the Standard Compression dialog. If °dONLNd    :|F⁄(böyou hold down the°dONLNd    "FRΩ(n6]option key when clicking on the compressor list to display the complete list, it will appear.°dONLNd    Äj|)*)Features You Get With Some Code õ4õ˘ °dONLNd    †äñ*This section describes the features of QuickTime °dONLNd    —äñ⁄)(1.6 which are NOT added transparently to°dONLNd    ˙ñ¢Ê(æ6*QuickTime. Your application will need new °dONLNd
  31. $ñÊ¢⁄)Œ4code to take advantage of them. In this section, the°dONLNd
  32. Y¢ƺ( 6$use of these features are explained. fl4fl˘
  33. *(4) of 18(ÚëQuickTime 1.6 Tech Noteˇå◊#ˇ ˇˇˇˇ#◊ 
  34. d,Times
  35. .+6,Developer Technical Support(,Ã
  36. April 1993 .4.˘°dONLNd*8Œ(T6Movie Toolbox Enhancements W4W˘ °dONLNdEQi*DThe Movie Toolbox has three new calls, and two new flags. First, we °dONLNd_EiQ⁄(máwill talk about the new°dONLNdwQ]é(y6flag. When using either ,
  37. Courier    °dONLNdèRé]Ú)vPasteHandleIntoMovie °dONLNd£QÚ])d or     °dONLNdßR]r)ConvertFileToMovieFile °dONLNdΩQr]¶)n  to import °dONLNd»Q¶]⁄)4 data into a°dONLNd‘]iô(Ö6movie, you can now set the     °dONLNdÔ^ôi)ÅshowUserSettingsDialog °dONLNd]ik)n flag. This will cause °dONLNd]ki⁄)dthe user settings dialog°dONLNd5iu`(ë6Ifor that import operation to be displayed, if there is one. For example, °dONLNd~i`u⁄(ë~when importing a picture,°dONLNdòuÅ    (ù61this would cause the Standard Compression dialog °dONLNd…u    Å⁄)Ò)to be displayed so the compression method°dONLNdÛÅçk(©6could be selected.    °dONLNdó<¢æ+$showUserSettingsDialog = 2°dONLNd"¨∑h(”6hintsHighQuality °dONLNd2´h∑ú)P
  38.  is a new °dONLNd<´ú∑◊)4 flag to the     °dONLNdH¨◊∑,);SetMoviePlayHints °dONLNdY´,∑I)U and     °dONLNd^¨I∑û)SetMediaPlayHints °dONLNdo´û∑⁄)U routines. It°dONLNd}∑√fi(fl6(specifies that the given movie or media °dONLNd•∑fi√⁄)Δ2should render at the highest quality. Rendering at°dONLNdÿ√œ?(Î6<highest quality may take considerably more time and memory. °dONLNd√?œ⁄(Î]!Therefore, this mode is typically°dONLNd6œ€û(˜6Snot appropriate for real time playback, but is very useful for recompressing as it °dONLNdâœû€⁄(˜º can generate°dONLNdñ€ÁÄ(6higher quality images.    °dONLNdÆÛ<˛Ø+$hintsHighQuality = 1<<8 °dONLNd…    Ö(16The high quality mode °dONLNdfl    Ö⁄)mEcan be used with other media handlers as well. For example, the Video°dONLNd%!ô(=6QMedia Handler turns off fast dithering and allows high quality dithering. Now we °dONLNdvô!⁄(=∑will introduce°dONLNdÖ!-Ω(I6"the three new Movie Toolbox calls.°dONLNd®9!E»+    SetMovieDrawingCompleteProc d=d˘    °dONLNdƒQ!\®*SetMovieDrawingCompleteProc °dONLNdflP®\Ü)á3 lets you set a call back procedure that is called °dONLNdPÜ\⁄)fiafter a Movie has°dONLNd$\!h0(Ñ?6drawn in one or more of its tracks. In this way, your °dONLNdZ\0h⁄(ÑN application can be aware of when°dONLNd{h!t(ê?0QuickTime has drawn frames, and when it hasn’t. °dONLNd´ht⁄)˝$This information is very useful when°dONLNd–t!Äi(ú?combined with     °dONLNdfiuiÄØ)HSetTrackGWorld °dONLNdÏtØÄÎ)F (see below).    °dONLNd˙ä!ï¿(±?Spascal void SetMovieDrawingCompleteProc(Movie theMovie, MovieDrawingCompleteProcPtr°dONLNdNî!ü{*
  39. proc, long refCon)°dONLNda®!≥I*theMovie°dONLNdj®Ñ≥)cThe Movie to set the proc on.°dONLNdà≤!Ω5(Ÿ?proc°dONLNdç≤ÑΩj)c.Your call back procedure, or nil to remove it.°dONLNdºº!«?(„?refCon°dONLNd√ºÑ«V)c*Value to pass to your call back procedure.°dONLNdÓ–!€∂(˜?Qtypedef pascal OSErr (*MovieDrawingCompleteProcPtr)(Movie theMovie, long refCon); °dONLNd@‰!C*Errors    °dONLNdH!˚b* invalidMovie °dONLNdVÑ˚ù)c-2010°dONLNd\®˚4)$Your movie reference is bad. °dONLNdy!{(.?SetTrackGWorld 1=1˘    °dONLNdà!g*SetTrackGWorld °dONLNdñg
  40. )F% lets you force a track to draw into °dONLNdª
  41. ⁄)£'a particular GWorld. This GWorld may be°dONLNd„!+Ä(G?different from that °dONLNd˜Ä+⁄)_Fof the entire movie. After the track has drawn, it calls your transfer°dONLNd>+!7å(S?Kprocedure to copy the track to the actual movie GWorld. When your transfer °dONLNdâ+å7⁄(S™procedure is set,°dONLNdõ7!C®(_?the current GWorld is set to °dONLNd∏7®C⁄)áBthe correct destination. You can also install a transfer procedure°dONLNd˚C!OE(k?and set °dONLNd    CEO⁄)$Uthe GWorld to nil. This will result in your transfer procedure being called only as a°dONLNd    YO![g(w?Inotification that the track has drawn -- no transfer needs to take place. fl4fl˘
  42. (Ú6QuickTime 1.6 Tech Note(Ú€5) of 18ˇæ◊#ˇ ˇˇˇˇ#◊ 
  43. d,Times
  44. .+6,Macintosh Technical Notes .4.˘,
  45. Courier    °dONLNd!'Ñ+    Gpascal void SetTrackGWorld(Track theTrack, CGrafPtr port, GDHandle gdh,°dONLNdH&!1’*
  46. $TrackTransferProc proc, long refCon)°dONLNdm:!EI*theTrack°dONLNdv:ÑE)cThe track to set the proc to.°dONLNdîD!O5(k?port°dONLNdôDÑOÿ)cDThe port for the track to draw to, or nil to use the Movie’s GWorld.°dONLNdfiN!Y0(u?gdh°dONLNd‚NÑY))c!GDevice associated with the port.°dONLNdX!c5(?proc°dONLNd    XÑcƒ)c@Returns pointer to your transfer procedure, or nil to remove it.°dONLNdJb!mD(â?refCon °dONLNdRbÑmL)c(Value to pass to your tranfer procedure.°dONLNd{v!Åa(ù?@typedef pascal OSErr (*TrackTransferProc)(Track t, long refCon); °dONLNdºå!òC*Errors    °dONLNdƒò!£b* invalidMovie °dONLNd“òÑ£ù)c-2009°dONLNdÿò®£4)$Your track reference is bad. °dONLNdıÆ!∫é(÷?GetMovieCoverProcs Ÿ=Ÿ˘    °dONLNdº!«{*GetMovieCoverProcs °dONLNdª{«e)Z5 lets you retrieve the cover procs that you set with     °dONLNdOºe«ø)ÍSetMovieCoverProcs °dONLNdaªø«¬)Z.    °dONLNdc—!‹¨(¯?Opascal OSErr GetMovieCoverProcs(Movie theMovie, MovieRgnCoverProc *uncoverProc,°dONLNd≥€!ʯ*
  47. +MovieRgnCoverProc *coverProc, long *refcon)°dONLNdflÔ!˙:*Movie°dONLNdÂÔÑ˙‘)cMovie reference.°dONLNdˆ˘!v( ?MovieRgnCoverProc°dONLNd˘ÑG)c'Returns the uncover proc for the movie.°dONLNd0!v(*?MovieRgnCoverProc°dONLNdBÑ=)c%Returns the cover proc for the movie.°dONLNdh!5(4?long°dONLNdmÑ`)c,Returns the refcon for the cover procedures. °dONLNdö#!/C(K?Errors    °dONLNd¢/!:b* invalidMovie °dONLNd∞/Ñ:ù)c-2010°dONLNd∂/®:4)$Your movie reference is bad.°dONLNd’Q_Î({6Image Compression Enhancements ~4~˘ °dONLNdÙlxπ*The Image Compression has four °dONLNdlπx⁄)°<new calls, and it's performance has been increased. Both the°dONLNdPxÑd(†6?Photo CD and JPEG decompressors have been upgraded to directly °dONLNdèxdÑ⁄(†Çsupport  the clipping of°dONLNd®Ñêº(¨6]images. This greatly decreases the time necessary to display large images. In particular, it °dONLNdѺê⁄(¨⁄makes°dONLNd êú≥(∏6Rit much easier to work with high resolution Photo CD images. Now, we will discuss °dONLNd]ê≥ú⁄(∏—the four°dONLNdfú®F(ƒ6
  48. new calls.°dONLNdq¥!¿§+    SetSequenceProgressProc fl=fl˘    °dONLNdâ¬!Õî*SetSequenceProgressProc °dONLNd†¡îÕÂ)s allows you to °dONLNdØ¡ÂÕ⁄)Q,set a progress procedure on a Compression or°dONLNd‹Õ!ŸR(ı?;Decompression Sequence, just as in the past you could have °dONLNdÕRŸ⁄(ıpa progress procedure when°dONLNd1Ÿ!ÂÚ(?+compressing or decompressing a still image.    °dONLNd^Ò!¸ù*Lpascal OSErr SetSequenceProgressProc(ImageSequence seqID, ProgressProcRecord°dONLNd´˚!g*
  49. *progressProc)°dONLNd∫!:*seqID°dONLNd¿ÑË)cSequence identifier.°dONLNd’!$](@? progressProc°dONLNd‚Ñ$Œ)cBPointer to a record containing information about the application's°dONLNd%#Ñ. *
  50. progress proc. °dONLNd49E‘(a6"The Image Compression Manager has °dONLNdV9‘E⁄)º53 additional calls which allow applications to zoom a°dONLNdåEQ©(m6monitor. They are considered °dONLNd©E©Q?)ëlow-level calls (comparable to     °dONLNd»F?Qq)ñ
  51. SetEntries °dONLNd“EqQ⁄)2) that should only be°dONLNdËQ](y6+used when playing back QuickTime movies in °dONLNdQ]⁄)¯%a controlled environment with no user°dONLNd9]i*(Ö6>interaction.  Also, because this capability is not present on °dONLNdw]*i⁄(ÖH%all machines, applications should not°dONLNdùiuè(ë6depend on its availability.°dONLNdπÅçN*BThe new calls provide a standard way for developers to access the °dONLNd˚ÅNç⁄(©lx mode of a user’s monitor°dONLNd    çô∏(µ6Vfor playback. Effectively, this allows you to have full screen Compact Video playback °dONLNd    mç∏ô⁄(µ÷on low°dONLNd    tô•ï(¡6end Macintosh computers. fl4fl˘
  52. *16) of 18(ÚëQuickTime 1.6 Tech NoteˇX◊#ˇ ˇˇˇˇ#◊ 
  53. d,Times
  54. .+6,Developer Technical Support(,Ã
  55. April 1993 .4.˘ °dONLNd(h(D6Hardware 200% °dONLNdh(⁄)POresize is currently available only on the Macintosh LC II, IIvx, IIvi, Performa°dONLNd^(4Ã(P6%400, Performa 600, and Color Classic °dONLNdÉ(Ã4÷)¥6in 16-bit (thousands of colors) display mode on the 12°dONLNdπ(÷4⁄(PÙ-°dONLNd∫4@“(\6`inch (512 x 384 pixels) monitors. In the future, other graphic devices may take advantage of it.°dONLNdLXs*To implement this °dONLNd-LsX⁄)[Gfunctionality, the Image Compression Manager actually make calls to the°dONLNduXd\(Ä6Video Driver °dONLNdÇX\d⁄)DLfor the given device. Video card manufacturers interested in supporting this°dONLNdœdpŒ(å6)functionality in their cards should link °dONLNd¯dŒp )∂
  56. DEVSUPPORT°dONLNdd pâ)R for more information.°dONLNd|!àb(§?
  57. GDHasScale ß=ߢ,
  58. Courier    °dONLNd$ä!ïS*
  59. GDHasScale °dONLNd.âSïõ)2J returns the closest possible scaling that a particular screen device can °dONLNdxâõï⁄(±πbe set to in a°dONLNdáï!°_(Ω?Cgiven pixel depth. It returns scaling information for a particular °dONLNd ï_°⁄(Ω}GDevice for a requested°dONLNd‚°!≠±(…?depth. It allows you to query °dONLNd°±≠⁄)ê;a GDevice without actually changing it. For example, if you°dONLNd<≠!πF(’?specify     °dONLNdDÆFπi)%0x20000 °dONLNdK≠iπΩ)#, but the GDevice °dONLNd]≠Ωπ)Tdoes not support it,     °dONLNdrÆπP)a
  60. GDHasScale °dONLNd|≠Pπ°)2 will return with     °dONLNd鯰π∫)QnoErr °dONLNdì≠∫π⁄), and a°dONLNdõπ!≈H(·?    scale of     °dONLNd§∫H≈k)'0x10000 °dONLNd´πk≈ñ)#?. Remember, it checks for a supported depth, so your requested °dONLNdÍπñ≈⁄(·¥depth must be°dONLNd¯≈!—¢(Ì?supported by the GDevice.     °dONLNdΔ¢—‘)Å
  61. GDHasScale °dONLNd≈‘—7)2 references the video °dONLNd2≈7—⁄)c"driver through the graphics device°dONLNdU—!›M(˘?
  62. structure.°dONLNd`È!ı5*For °dONLNddÈ5ı⁄)Vmultiple screens, see "Multiple Screen Revealed" in develop 10 to find out how to walk°dONLNdªı!p(?the GDeviceList.    °dONLNdÃ!W*>pascal OSErr GDHasScale(GDHandle gdh,short depth,Fixed *scale)°dONLNd !!,0*gdh°dONLNd!Ñ,=)c%a handle to a screen graphics device.°dONLNd6+!6:(R?depth°dONLNd<+Ñ6ÿ)cDpixel depth of screen device.  Use this field to specify which pixel°dONLNdÅ5Ñ@É*
  63. 3depth that scaling information should returned for.°dONLNdµ?!J:(f?scale°dONLNdª?ÑJÿ)cDa pointer to a fixed point scale value.  On input, this field should°dONLNdIÑT∫*
  64. >be set to the desired scale value.  On output, this field will°dONLNd?SÑ^ÿ*
  65. Dcontain the closest scale available for the given depth.  A scale of°dONLNdÑ]ÑhŒ*
  66. B0x10000 indicates normal size, 0x20000 indicates double size, etc. °dONLNd«s!C(õ?Errors    °dONLNdœ!äN*     cDepthErr°dONLNdŸÑä=)c%The requested depth is not supported.°dONLNdˇâ!îD(∞?cDevErr°dONLNdâÑîË)cNot a screen device.°dONLNdì!ûS(∫?
  67. controlErr°dONLNd'ìÑûV)c*Video driver can not respond to this call. °dONLNdR©!µ`(—?
  68. GDGetScale ‘=‘˘    °dONLNd]∑!¬S*
  69. GDGetScale °dONLNdg∂S¬o)2? returns the current scale of the given screen graphics device.    °dONLNdßÃ!◊\(Û??pascal OSErr GDGetScale(GDHandle gdh,Fixed *scale,short *flags)°dONLNdÁ‡!Î0*gdh°dONLNd·ÑÎ=)c%a handle to a screen graphics device.°dONLNdÍ!ı:(?scale°dONLNdÍÑıó)c7pointer to a fixed point field to hold the scale result°dONLNdOÙ!ˇ:(?flags°dONLNdUÙÑˇŒ)cBpointer to a short.  It returns the status parameter flags for the°dONLNdò˛Ñ    µ*
  70. =video driver. For now, zero is always returned in this field. °dONLNd÷! C(<?Errors    °dONLNdfi !+D* cDevErr°dONLNdÊ Ñ+Ë)cNot a screen device.°dONLNd˚*!5S(Q?
  71. controlErr°dONLNd    *Ñ5V)c*Video driver can not respond to this call. °dONLNd    1L!X^(t?
  72. GDSetScale w=w˘°dONLNd    <Y!e+*8GDSetScale sets a screen graphics device to a new scale.    °dONLNd    uo!zR*=pascal OSErr GDSetScale(GDHandle gdh,Fixed scale,short flags)°dONLNd    ≥É!é0*gdh°dONLNd    ∑ÉÑé=)c%a handle to a screen graphics device.°dONLNd    ›ç!ò:(¥?scale°dONLNd    „çÑò)ca fixed point scale value.°dONLNd    ˛ó!¢:(æ?flags°dONLNd
  73. óÑ¢Ÿ)calways pass zero. fl4fl˘
  74. (Ú6QuickTime 1.6 Tech Note(Ú€7) of 18ˇb◊#ˇ ˇˇˇˇ#◊ 
  75. d,Times
  76. .+6,Macintosh Technical Notes .4.˘ °dONLNd!(C+    Errors,
  77. Courier    °dONLNd(!3D* cDevErr°dONLNd(Ñ3Ë)cNot a screen device.°dONLNd%2!=S(Y?
  78. controlErr°dONLNd02Ñ=V)c*Video driver can not respond to this call.°dONLNd[`nÔ(ä6Base Media Handler Enhancements ç4ç˘ °dONLNd{{á-*The °dONLNd{-á⁄)VBase Media Handler interface has been extended with 3 new calls, and a new flag. These°dONLNd÷áìÛ(Ø6,features were added to provide high quality °dONLNdáÛì⁄)€,movie playback. The text media handler takes°dONLNd/ìüÄ(ª6Madvantage of these new calls, and provides built-in support for anti-aliased °dONLNd|ìÄü⁄(ªûtext. It is achieved°dONLNdëü´í(«6through a playback hint °dONLNd©üí´⁄)z=to the base media handler, which the Apple Text Media Handler°dONLNdÁ´∑B(”6
  79. derives.  °dONLNdÒ´B∑s)* This hint,     °dONLNd¸¨s∑√)1hintsHighQuality °dONLNd ´√∑⁄)P6, has been discussed in the Movie Toolbox Enhancements°dONLNdC∑√Z(fl6section above.°dONLNdRœ€-*The     °dONLNdV–-€n)MediaSetHints °dONLNdcœn€Ö)A and     °dONLNdh–Ö€ )MediaGetOffscreenBufferSize °dONLNdÉœ €⁄)á) routines were added to the Derived Media°dONLNd≠€ÁQ(6@Handler interface to support high quality mode. Since the Apple °dONLNdÌ€QÁ⁄(oText Media Handler derives°dONLNdÁÛ(6Pthe base media handler, it can use these new calls to support anti-aliased text.°dONLNdY!o+    MediaSetHints -=-˘°dONLNdg!E*When     °dONLNdlEö)$SetMoviePlayHints °dONLNd}ö≤)U or     °dONLNdÅ≤)SetMediaPlayHints °dONLNdí†)U is called by an application, °dONLNd∞†⁄)ô
  80. your media°dONLNdª!'Q(C?
  81. handler’s     °dONLNd≈Q'í)0MediaSetHints °dONLNd“í'ƒ)A  routine is °dONLNdfiƒ'⁄)29called. This allows you to implement appropriate behavior°dONLNd'!3m(O?Efor the various media hints such as scrub mode and high quality mode.    °dONLNd^?!JÑ*Gpascal ComponentResult MediaSetHints (ComponentInstance ci, long hints)°dONLNd¶U!`+*ci°dONLNd©UÑ`[)c+Component instance of a base media handler.°dONLNd’_!j:(Ü?hints°dONLNd€_Ñjç)c5All hint bits the currently apply to the given media. °dONLNdu!ÅC(ù?Errors    °dONLNdÅ!åÖ* badComponentInstance°dONLNd.Å®å⁄)á
  82. 0x80008001°dONLNd9Åå|)HGet a new component instance °dONLNdVö!¶º(¬?MediaGetOffscreenBufferSize ≈=≈˘°dONLNdsß!≥*+Before the Base Media Handler allocates an °dONLNdûß≥⁄)Ê'offscreen buffer for your Derived Media°dONLNdΔ≥!øé(€?Handler, it calls your     °dONLNd›¥éø)mMediaGetOffscreenBufferSize °dONLNd¯≥ø®)á routine to allow your media °dONLNd≥®ø⁄)ì
  83. handler to°dONLNd ø!À(Á?2chose the dimensions of the buffer. The depth and °dONLNdRøÀ⁄)Ô,color table that will be used for the buffer°dONLNdÀ!◊„(Û?)are also passed. When you are called the     °dONLNd®Ä◊)¬
  84. rectBounds °dONLNd≤À◊Ü)2 parameter specifies the °dONLNdÀÀÜ◊⁄)qsize that the Base°dONLNdfi◊!„¬(ˇ? Media Handler will use for your °dONLNd˛◊¬„⁄)°8offscreen by default. You can modify this as appropriate°dONLNd7„!ÔÖ( ?Kbefore returning. This capability is useful if your media handler can only °dONLNdÇ„ÖÔ⁄( £draw at particular°dONLNdïÔ!˚ö(?sizes. It is also useful for °dONLNd≤Ôö˚⁄)yBimplementing anti-aliased drawing as you can request a buffer that°dONLNdı˚!J(#?
  85. is larger °dONLNdˇ˚J⁄))Pthan your destination area, and have the Base Media Handler scale the image down°dONLNdP!G(/?for you.    °dONLNdZ!*ß*Npascal ComponentResult MediaGetOffscreenBufferSize (ComponentInstance ci, Rect°dONLNd©)!4Û*
  86. **rectBounds, short depth, CTabHandle ctab)°dONLNd‘=!H+*ci°dONLNd◊=ÑH[)c+Component instance of a base media handler.°dONLNd    G!R:(n?Rect °dONLNd        GÑRQ)c)The boundaries of your off-screen buffer.°dONLNd    3Q!\:(x?depth°dONLNd    9QÑ\˜)cDepth of the offscreen.°dONLNd    Q[!f5(Ç?ctab°dONLNd    V[Ñf∫)c>Color table associated with off-screen. You can set it to nil. °dONLNd    ïq!}C(ô?Errors    °dONLNd    ù}!àÖ* badComponentInstance°dONLNd    ≤}®à⁄)á
  87. 0x80008001°dONLNd    Ω}àÅ)HGet a new component instance. fl4fl˘
  88. (Ú68) of 18(ÚëQuickTime 1.6 Tech Noteˇ⁄◊#ˇ ˇˇˇˇ#◊ 
  89. d,Times
  90. .+6,Developer Technical Support(,Ã
  91. April 1993 .4.˘ °dONLNd!(r(D? MediaGetName G=G˘,
  92. Courier    °dONLNd*!5]* MediaGetName °dONLNd)]5ã)<= let's you retrieve the name of the media type. For example, °dONLNdV)ã5⁄(Q©the video media°dONLNdf5!A“(]?'handler will return the string "Video".    °dONLNdéK!V*Fpascal ComponentResult MediaGetName(MediaHandler mh, Str255 name, long°dONLNd’U!`Ó*
  93. )requestedLanguage, long *actualLanguage )°dONLNdˇi!tv*ComponentInstance°dONLNdiÑt$)c The base media handler instance.°dONLNd2s!~?(ö?Str255°dONLNd9sÑ~ )cThe name of the media type.°dONLNdU}!à5(§?Long°dONLNdZ}ÑàŸ)cA bunch of flags. °dONLNdlì!üC(ª?Errors    °dONLNdtü!™Ö* badComponentInstance°dONLNdâü®™⁄)á
  94. 0x80008001°dONLNdîü™Å)HGet a new component instance.°dONLNd≤Õ€Ô(˜6Text Media Handler Enhancements ˙4˙˘ °dONLNd“ËÙ *]The text media handler interface includes 6 new flags, and one new routine. The flags let you°dONLNd0Ù * ^control the behavior of the text media handler. The display flags are used in conjunction with°dONLNdè )* the     °dONLNdì) `) AddTESample °dONLNdû` w)7 and     °dONLNd£w ∏)AddTextSample °dONLNd∞∏ å)A/ routines. The display flags are passed in the     °dONLNdflå »)‘ displayFlags °dONLNdÏ I(46
  95. parameter.    °dONLNd˜%0r*dfContinuousScroll °dONLNd    $r0∂)ZF is a display flag which tells the Apple Text Media Handler to let new°dONLNdP0<Ì(X6-samples cause previous samples to scroll out.    °dONLNd~GRO* dfFlowHoriz °dONLNdâFOR∏)7O is a display flag which tells the Apple Text Media Handler to let horizontally°dONLNdŸR^Õ(z6cscrolled text to flow within the text box. This behavior contrasts with letting text flow as if the°dONLNd=^jñ* text box had no right edge.    °dONLNdYwÇT* dfDropShadow °dONLNdevTÇ…)<P is a display flag which tells the Apple Text Media Handler to support true drop°dONLNd∂Çég(™6shadows. Using     °dONLNd≈Égéº)OSetTextSampleData °dONLNd÷Ǻé—)U;, the position and translucency of the drop shadow is under°dONLNdéör(∂6application control.    °dONLNd'•∞O* dfAntiAlias °dONLNd2§O∞÷)7V is a display flag which tells the Apple Text Media handler to attempt to display text°dONLNdâ∞ºP(ÿ6anti-aliased.    °dONLNdó…‘O* dfKeyedText °dONLNd¢»O‘…)7S is a display flag which tells the Apple Text Media handler to render text over the°dONLNdˆ‘‡º(¸6Ubackground without drawing the background color. This technique is otherwise known as°dONLNdL‡Ïc* "Masked Text."    °dONLNd[¯6*enum {°dONLNdbw*
  96. dfContinuousScroll °dONLNdvÑß)l= 1<<9,°dONLNd T(36 dfFlowHoriz °dONLNdç Ѩ)l= 1<<10,°dONLNdñ!Y(=6dfDropShadow °dONLNd•Ñ!¨)l= 1<<12,°dONLNdØ +T(G6 dfAntiAlias °dONLNdΩ Ñ+¨)l= 1<<13,°dONLNd«*5T(Q6 dfKeyedText °dONLNd’*Ñ5ß)l= 1<<14°dONLNd›4?"([6};°dONLNd‡KVm*findTextUseOffset °dONLNdÒJmV4)U) is a new find text flag which instructs     °dONLNdK4Vp)« FindNextText °dONLNd&JpV⁄)< to look at the value°dONLNd<Vbr(~6pointed to by the °dONLNdNVrb⁄)ZIoffset parameter and start the search at that offset into the text sample°dONLNdòbnT(ä6indicated by     °dONLNd•cTnÅ)<    startTime °dONLNdÆbÅnã)-:. This allows you to continue a text search from within a °dONLNdËbãn⁄(ä©given sample, so°dONLNd˘nzò(ñ6Sthat multiple occurrences of the search string can be found within a single sample. fl4fl˘
  97. *\QuickTime 1.6 Tech Note(Ú€9) of 18ˇX◊#ˇ ˇˇˇˇ#◊ 
  98. d,Times
  99. .+6,Macintosh Technical Notes .4.˘,
  100. Courier    °dONLNd&1ã*!findTextUseOffset = 16; °dONLNd<!Hà+    SetTextSampleData g=g˘    °dONLNd+J!Uv*SetTextSampleData °dONLNd<IvU)U# allows you to set values prior to °dONLNd_IU4)õcalling     °dONLNdgJ4Uu)#AddTextSample °dONLNdtIuUá)A or     °dONLNdxJáUæ) AddTESample °dONLNdÉIæU⁄)7. Two°dONLNdâU!aV(}?Btypes are currently supported: 'drpo' and 'drpt'. The first type, °dONLNdÀUVa⁄(}t'drpo', is the drop shadow°dONLNdÊa!mü(â?offset. Pass the address °dONLNdˇaüm⁄)~<of a point for the data parameter. 'drpt' is the drop shadow°dONLNd<m!y∑(ï?Ytranslucency. Pass a value from 0 to 255, where 0 is the lightest and 256 is the darkest.    °dONLNdñÉ!éœ*Vpascal ComponentResult SetTextSampleData(MediaHandler mh, void *data, OSType dataType)°dONLNdÌó!¢+*mh°dONLNdóÑ¢ø)c?Reference to the text media handler. Could use GetMediaHandler.°dONLNd0°!¨5(»?data°dONLNd5°Ñ¨o)c/Pointer to data, defined by dataType parameter.°dONLNdf´!∂S(“?
  101. handleType°dONLNdq´Ñ∂∫)c>Sets the type of data in the handle. For now, either 'drpo' or°dONLNd∞µÑ¿ß*
  102. 'drpt'. °dONLNd∏À!◊C(Û?Errors    °dONLNd¿◊!‚Ö* badComponentInstance°dONLNd’◊®‚⁄)á
  103. 0x80008001°dONLNd‡◊‚Æ)H&Your media handler reference is hosed. °dONLNdÎ!˜.(?7Here is some sample pseudo-code (it might not compile):    °dONLNd?! ?*short °dONLNdF` ú)? trans = 127;°dONLNdS !:(2?Point°dONLNdY `ó)? dropOffset;°dONLNde!*¡(F? dropOffset.h = dropOffset.v = 4;°dONLNdÜ)!4*
  104. -SetSampleData(mh,(void *)&dropOffset,'drpo');°dONLNd¥3!>È*
  105. (SetSampleData(mh,(void *)&trans,'drpt'); °dONLNd›I!Uä*Be sure to turn on the     °dONLNdÙJäUΔ)i dfDropShadow °dONLNdIΔUG)< display flag when you call     °dONLNdKGTÑ)ÅAddTextSample °dONLNd)IÑUî)= or     °dONLNd-JîUÀ) AddTESample °dONLNd8IÀUŒ)7.°dONLNd:m{(ó6$Import/Export Component Enhancements ö4ö˘ °dONLNd_àîï*GExport components have one new flag, one new error, two new functions, °dONLNd¶àïî⁄(∞≥ one new data°dONLNd≥(º6structure, one new component, °dONLNd—⁄)ë:and an enhancement to the Sound Export component. The Text°dONLNd †¨î(»6Movie export component °dONLNd#†î¨⁄)|>was introduced above. Import components have one new function.°dONLNdb¨∏K(‘6;The Audio CD Movie Import component was already introduced.    °dONLNdû≈–ü*canMovieExportAuxDataHandle °dONLNdπƒü–ÿ)á  is a movie °dONLNd≈ƒÿ–⁄)9/export component flag. A Movie Export Component °dONLNdı–‹ä(¯6that supports the     °dONLNd—ä‹)rMovieExportGetAuxiliaryData °dONLNd"–‹k)á call should  °dONLNd/–k‹⁄)Zalso now set the    °dONLNd@›Ëü(6canMovieExportAuxDataHandle °dONLNd[‹üË—)á flag in its     °dONLNdh›—Ë)2ComponentFlags °dONLNdv‹Ë)F.    °dONLNdyÙ<ˇ·(Z!canMovieExportAuxDataHandle = 128 °dONLNdõ
  106. K(26
  107. The error     °dONLNd• K·)3auxiliaryExportDataUnavailable °dONLNd√
  108. ·Ê)ñ °dONLNdƒ
  109. Ê⁄).has been added. It will be returned by a Movie°dONLNdÛ"î(>6Export Component when     °dONLNd    î")|MovieExportGetAuxiliaryData °dONLNd$")á is called requesting °dONLNd:"⁄)da type of auxiliary°dONLNdN".÷(J6(data that the component cannot generate.    °dONLNdy:<E˙+$&auxiliaryExportDataUnavailable = -2058 °dONLNd†P\„(x6%The Sound Movie Export component has °dONLNd≈P„\⁄)À/been updated to take advantage of the new Sound°dONLNdı\h(Ñ6Manager. Previously, °dONLNd
  110. \h⁄)gFonly the first sound track in the movie was exported. Now sound tracks°dONLNdQhtÒ(ê6-are mixed together before being exported. If °dONLNd~hÒt⁄)Ÿ/your application wants to take advantage of the°dONLNdÆtÄ®(ú6sound mixing, you can use     °dONLNd»u®Ä)êPutMovieIntoTypedHandle °dONLNdfltÄa)s. It will take °dONLNdÓtaÄ⁄)Fadvantage of the export°dONLNd    ÄåQ(®6>component. Furthermore, you can now specify the format of the °dONLNd    DÄQå⁄(®oexported sound, so you can°dONLNd    _åò9(¥6>convert 16 bit sound to 8 bit sound, or reduce stereo to mono. fl4fl˘
  111. *>10)
  112.  of 18(ÚëQuickTime 1.6 Tech Noteˇ¯◊#ˇ ˇˇˇˇ#◊ 
  113. d,Times
  114. .+6,Developer Technical Support(,Ã
  115. April 1993 .4.˘ °dONLNd!(Ÿ(D?MovieExportSetSampleDescription G=G˘,
  116. Courier    °dONLNd 4!?º*MovieExportSetSampleDescription °dONLNd?3º?û)õ0 allows an application to request the format of °dONLNdo3û?⁄)‚ the exported°dONLNd|?!Kw(g?data, the routine     °dONLNdé@wK)VMovieExportSetSampleDescription °dONLNd≠?Kä)õ has been added. This °dONLNd√?äK⁄)xcall is currently°dONLNd’K!W(s?.supported by the Movie Export Sound Component.    °dONLNda!l±*Ppascal ComponentResult MovieExportSetSampleDescription(MovieImportComponent  ci,°dONLNdUk<v'+
  117. /SampleDescriptionHandle desc, OSType mediaType)°dONLNdÖ!ä+(¶?ci°dONLNdàÑäe)c-Component Instance of movie import component.°dONLNd∂â!î5(∞?desc°dONLNdªâÑîo)c/Handle to a valid QuickTime sample description.°dONLNdÎì!ûN(∫?    mediaType°dONLNdıìÑû¶)c:The type of the media that the sample description is from. °dONLNd0©!µC(—?Errors    °dONLNd8µ!¿Ö* badComponentInstance°dONLNdMµ®¿⁄)á
  118. 0x80008001°dONLNdXµ¿Å)HGet a new component instance. °dONLNdv…!’›(Ò?MovieImportGetAuxiliaryDataType Ù=Ù˘    °dONLNdñ◊!‚º*MovieImportGetAuxiliaryDataType °dONLNdµ÷º‚¶)õ6 should return the type of the auxiliary data that it °dONLNdÎ÷¶‚⁄)Í can accept.°dONLNd˜‚!Óî(
  119. ?This is useful if you are °dONLNd‚îÓ⁄)sDinterested with import components directly. For example, if you call°dONLNdVÓ!˙≈(?athe text import component with this call, it will indicate that it can accept 'styl' information.    °dONLNd∏!∂*Qpascal ComponentResult MovieImportGetAuxiliaryDataType(MovieImportComponent  ci, °dONLNd
  120. <å+
  121. OSType *auxType)°dONLNd"!-+(I?ci°dONLNd"Ñ-ç)c5The movie import component instance. Retrieve it with°dONLNdT,Ñ7B*
  122. &OpenDefaultComponent or OpenComponent.°dONLNd{6!AD(]?auxType°dONLNdÉ6ÑA˜)cPointer to the type of °dONLNdö6˜A⁄)s,auxiliary data it can import. For example, a°dONLNd«@ÑK–(g¢@text import component can bring in 'text' data. But, if it says °dONLNd@–K⁄(gÓit°dONLNd
  123. JÑUÈ(q¢can return 'styl', °dONLNdJÈU⁄)e,then it will import the style information as°dONLNdJTÑ_ù({¢well. °dONLNdPj!vC(í?Errors    °dONLNdXv!ÅÖ* badComponentInstance°dONLNdmv®Å⁄)á
  124. 0x80008001°dONLNdxvÅ—)H-Your movie import component reference is bad. °dONLNd¶åòÙ(¥61Here is a new data structure for the text export °dONLNd◊åÙò⁄)‹1component. This data is useful after a text track°dONLNd    ò§√(¿6Zhas been exported. An application may want to know the way the text was stored as a track.    °dONLNdd∞!ªq+    typedef struct {°dONLNdv∫<≈P+
  125. long°dONLNd|∫Ñ≈≈)HdisplayFlags;°dONLNdãƒ<œP(ÎZlong°dONLNdëƒÑœfi)HtextJustification;°dONLNd•Œ<Ÿd(ıZRGBColor°dONLNdƌџ¨)HbgColor;°dONLNd∏ÿ<„P(ˇZRect°dONLNdæÿÑ„¨)HtextBox;°dONLNd»‚<ÌU(    Zshort°dONLNdœ‚ÑÌ¿)H beginHilite;°dONLNd›Ï<˜U(Zshort°dONLNd‰Ïј∂)H
  126. endHilite;°dONLNdˆ<d(ZRGBColor°dONLNd˘ˆÑ¿)H hiliteColor;°dONLNd< _('ZBoolean°dONLNdÑ  )HdoHiliteColor;°dONLNd
  127. <i(1Z    TimeValue°dONLNd)
  128. Ñœ)HscrollDelayDur;°dONLNd:<U(;ZPoint°dONLNdAÑŸ)HdropShadowOffset;°dONLNdT<)U(EZshort°dONLNd[Ñ)˜)HdropShadowTransparency;°dONLNds(!3{(O?} TextDisplayData; fl4fl˘
  129. (Ú6QuickTime 1.6 Tech Note(Ú÷11)
  130.  of 18ˇÓ◊#ˇ ˇˇˇˇ#◊ 
  131. d,Times
  132. .+6,Macintosh Technical Notes .4.˘ °dONLNd!(∞+    TextExportGetDisplayData G=G˘,
  133. Courier    °dONLNd*!5ô*TextExportGetDisplayData °dONLNd1)ô5q)x, returns the text display data for the text °dONLNd])q5⁄)ÿsample that was last°dONLNdr5!Aq(]?Gexported by the given text export component. After exporting text from °dONLNdπ5qA⁄(]èa text track, it is often°dONLNd”A!M;(i?>useful to find out about the text track characteristics. This °dONLNdA;M⁄(iY"data structure contains this extra°dONLNd4M!Y[(u? information.    °dONLNdAc!né*Ipascal ComponentResult TextExportGetDisplayData(TextExportComponent  ci, °dONLNdãm<x™+
  134. TextDisplayData *data)°dONLNd¢Å!å+(®?ci°dONLNd•ÅÑåà)c4The text export component instance. Retrieve it with°dONLNd⁄ãÑñB*
  135. &OpenDefaultComponent or OpenComponent.°dONLNdï!†X(º? displayData°dONLNdïц))c!Pointer to the text display data. °dONLNd/´!∑C(”?Errors    °dONLNd7∑!¬Ö* badComponentInstance°dONLNdL∑®¬⁄)á
  136. 0x80008001°dONLNdW∑¬—)H-Your movie import component reference is bad.°dONLNdÖŸÁW(6    ColorSync 4˘ °dONLNdèÙû*RColorSync is an extension for Macintosh providing a platform for consistent color °dONLNd·Ùû⁄(º reproduction°dONLNdÓ ∂((6between widely varying output °dONLNd ∂ ⁄)û6devices. Color Matching ability was added to the Image°dONLNdC á(46Compression Manager     °dONLNdWáæ)o DrawPicture °dONLNdb æ©)73 calls. Accurate color reproduction of images (not °dONLNdï ©⁄)Î
  137. movies) is°dONLNd†$—(@6&made easier with QuickTime’s flexible     °dONLNdΔ—$)π DrawPicture °dONLNd—$u)7 calls.  To enable color °dONLNdÍu$⁄)mmatching you simply°dONLNd˛$0;(L6set the     °dONLNd%;0ã)#useColorMatching °dONLNd$ã0≤)P     flag in °dONLNd$≤0⁄)'=the flags parameter to these calls. You can set the flag even°dONLNd]0<1(X6=when ColorSync is not installed, although it will be ignored.    °dONLNdúH<S†+$useColorMatching = 4°dONLNd±jxfl(î6Sequence Grabber Enhancement ó4ó˘ °dONLNdŒÖëÂ*(The Sequence Grabber component has just °dONLNdˆÖÂëJ)Õone flag added to it.     °dONLNd ÜJëÆ)egrabPictCurrentImage °dONLNd ÖÆë⁄)d     is a new°dONLNd*ëùM(π6 flag to the     °dONLNd6íMù)5
  138. SGGrabPict °dONLNd@ëù•)2
  139.  call. It °dONLNdJë•ù⁄)&?provides the fastest possible image capture, but may fail under°dONLNdäù©Ú(≈62certain circumstances. This failure is not fatal; °dONLNdºùÚ©⁄)⁄3it just will not return a picture. The routine does°dONLNd©µ(—66not pause the current preview or grab the next frame. °dONLNd&©µ⁄)˙*It causes the currently displayed image to°dONLNdQµ¡¡(›6'be captured. It is a good idea to call     °dONLNdx∂¡¡‰)©SGPause °dONLNdµ‰¡T)# yourself before calling     °dONLNdò∂T¡Ü)p
  140. SGGrabPict °dONLNd¢µÜ¡…)2 with this flag.    °dONLNd¥Õ<ÿ¥(ÙZgrabPictCurrentImage = 4°dONLNdÕÔ˝Ω(6Image Codec Enhancement 4˘ °dONLNdÂ
  141. c*;The interface for image codecs has three new functions and °dONLNd 
  142. c⁄(2Åone new flag defined.    °dONLNd6"ï(>6codecConditionFirstScreen °dONLNdOï"ú)}9 is a new  codec condition flag to the ImageCodec.h file.    °dONLNdä,<7·(SZ!#define codecConditionFirstScreen°dONLNd¨,7)¥(1L<<12) °dONLNdµBN–(j6UThe Standard Compression Dialog now provides Compressor Components with the option of°dONLNd NZ≠* Xdisplaying their own settings within the dialog. If a compressor supports the dialog, an°dONLNddZf÷* ^additional button will appear. The compressors settings are saved with the standard compressor°dONLNd√frl* settings when the 
  143. °dONLNd’flr¢)T    SCGetInfo °dONLNdfif¢r)6 call is used with the 
  144. °dONLNdıfrv)bscCodecSettingsType °dONLNd    fvr‘)r flag. The codec can°dONLNd    r~<(ö6?implement the functionality using the following three routines. fl4fl˘
  145. *X12)
  146.  of 18(ÚëQuickTime 1.6 Tech Noteˇ⁄◊#ˇ ˇˇˇˇ#◊ 
  147. d,Times
  148. .+6,Developer Technical Support(,Ã
  149. April 1993 .4.˘ °dONLNd(!4á(P?CDRequestSettings S=S˘,
  150. Courier    °dONLNd@!Kv*CDRequestSettings °dONLNd#?vK©)UC allows the display of a dialog of additional compression settings °dONLNdf?©K⁄(g« specific to°dONLNdrK!W•(s?the codec. This information °dONLNdéK•W⁄)ÑAis stored in a settings handle. The codec can store whatever data°dONLNd–W!c©(?Win any format wants in the settings handle and resize it accordingly.  It should store °dONLNd'W©c⁄(«    some type°dONLNd1c!o(ã?5of tag/version information that it can use to verify °dONLNdfco⁄)Û(that the data belongs to the codec.  The°dONLNdèo!{ÿ(ó?$codec should NOT dispose the handle.    °dONLNd¥Ö!ê *Upascal ComponentResult CDRequestSettings(ComponentInstance ci,  Handle settings, Rect°dONLNd
  151. è!ö–*
  152. #*rp, ModalFilterProcPtr filterProc)°dONLNd.£!Æ+*ci°dONLNd1£ÑÆ)cComponent instance of codec.°dONLNdN≠!∏I(‘?settings°dONLNdW≠Ñ∏Œ)cBHandle of data specific to the codec.  If the handle is empty, the°dONLNdö∑Ѭo*
  153. /codec should use some type of default settings.°dONLNdá!Ã+(Ë?rp°dONLNdœ¡Ññ)cPointer °dONLNd◊¡±Ã⁄)-3to rectangle giving the coordinates of the Standard°dONLNd ÀÑ÷°(Ú¢9Compression dialog in screen coordinates.  The codec can °dONLNdDÀ°÷⁄(Úø use this to°dONLNdP’чÉ(¸¢3position its dialog in the same area of the screen.°dONLNdÑfl!ÍS(?
  154. filterProc°dONLNdèflÑͺ)c:A pointer to modal dialog filter proc that the codec must °dONLNd…flºÍ⁄(⁄either°dONLNd–ÈÑÙí(¢4pass to ModalDialog or call at the beginning of the °dONLNdÈíÙ⁄(∞codec dialog's°dONLNdÛÑ˛ô(¢1filter.  This proc gives the calling application °dONLNdDÛô˛⁄(∑ and Standard°dONLNdQ˝Ñj($¢.Compression a chance to process update events. °dONLNdÄ!o(9?CDGetSettings <=<˘    °dONLNdé)!4b*CDGetSettings °dONLNdõ(b4ï)A@ allows a codec to get the settings chosen by a user. From this °dONLNd€(ï4⁄(P≥call, the codec°dONLNdÎ4!@D(\?should °dONLNdÚ4D@⁄)#[return its current internal settings.  If there are no current settings or the settings are°dONLNdN@!LF(h?@the same as the defaults, the codec can set the handle to empty.    °dONLNdèb!mù*!Lpascal ComponentResult CDGetSettings(ComponentInstance ci,  Handle settings)°dONLNd‹v!Å+*ci°dONLNdflvÑÅ)cComponent instance of codec.°dONLNd¸Ä!ãI(ß?settings°dONLNdÄÑãŒ)cBA handle that the codec should resize and fill in with the current°dONLNdHäÑï…*
  155. Ainternal settings.  It should be resized to empty if there are no°dONLNdäîÑü*
  156. current internal settings. °dONLNd•™!∂m(“?CDSetSettings ’=’˘    °dONLNd≥¬!Õb*CDSetSettings °dONLNd¿¡bÕ»)A allows a codec to set °dONLNd◊¡»Õ⁄)f;the settings of the optional dialog. Set the codecs current°dONLNdÕ!Ÿƒ(ı?Zinternal settings to the state specified in the settings handle.  The codec should always °dONLNdmÕƒŸ⁄(ı‚do a°dONLNdrŸ!Âü(?Uvalidity check on the contents of the handle so that invalid settings are never used.    °dONLNd»Ô!˙ù*Lpascal ComponentResult CDSetSettings(ComponentInstance ci,  Handle settings)°dONLNd!+*ci°dONLNdÑe)c-Component Instance of movie import component.°dONLNdF!I(4?settings°dONLNdOѵ)c=A handle to internal settings original returned by either the°dONLNdçÑ"ÿ*
  157. DCDRequestSettings or CDGetSettings calls.  The codec should set it's°dONLNd“!Ñ,…*
  158. Ainternal settings to match those of the settings handle.  Because°dONLNd    +Ñ6”*
  159. Cthe codec does not own the handle, it should not dispose of it, and°dONLNd    X5Ñ@µ*
  160. =should only copy its contents, not the handle itself.  If the°dONLNd    ñ?ÑJ∞*
  161. <settings handle passed in is empty, the codec should set its°dONLNd    ”IÑT=*
  162. %internal settings to a default state. fl4fl˘
  163. (Ú6QuickTime 1.6 Tech Note(Ú÷13)
  164.  of 18ˇú◊#ˇ ˇˇˇˇ#◊ 
  165. d,Times
  166. .+6,Macintosh Technical Notes .4.˘°dONLNd(:,*)New Component Manager Features Y4Y˘ °dONLNdHT’*YThe Component Manager in QuickTime 1.6 has some new features. The result returned for the°dONLNdyT`A*
  167. selector, ,
  168. Courier    °dONLNdÉUA`†))gestaltComponentMgr °dONLNdñT†`≠)_9, will be 3, indicating version number 3 of the Component°dONLNd–`lŸ(à6bManager. It has added the ability to automatically resolve conflicts between different versions of°dONLNd3lxÃ* \the same Component. It will ensure that only the most recent version of a given component is°dONLNdêxÑ¥* Vactually registered. In addition, the Component Manager now supports Icon Suites for a°dONLNdÁÑêÇ* JComponent, so a Component’s icon no longer has to be just black and white.°dONLNd3û™0*The     °dONLNd7ü0™Ö)ComponentResource °dONLNdHûÖ™ë)U4 data structure can now have an optional extension. °dONLNd|ûë™⁄(ΔØThis extension°dONLNdã™∂∂(“6Vdefines additional information about the Component. The data structure is shown below.    °dONLNd‚¡ë*#struct ComponentResourceExtension {°dONLNdÀ<÷P+$
  169. long°dONLNd À`÷µ)$componentVersion;°dONLNdÀ÷r)ê/* version of Component */°dONLNd;’<‡P(¸Zlong°dONLNd@’`‡”)$componentRegisterFlags;°dONLNdX’‡|)ê/* flags for registration */°dONLNdvfl<ÍU(Zshort°dONLNd|fl`Íø)$componentIconSuite;°dONLNdëflÍã)ê/* resource id of Icon Suite */°dONLNd±ÈÙ"(6};°dONLNd¥Û˛q*
  170. Etypedef struct ComponentResourceExtension ComponentResourceExtension; °dONLNd˙2*The     °dONLNd˛    2¥)ComponentResourceExtension °dONLNd¥)Ç is appended °dONLNd%Ö)Mto the end of existing     °dONLNd<    Ö⁄)ÑComponentResource °dONLNdN (<63structures. The Component Manager determines if it °dONLNdÅ ⁄(<6'is present by examining the size of the°dONLNd© ,C(H6    resource.°dONLNd≥8D/*The     °dONLNd∑9/D)componentVersion °dONLNd«8D-)P# field contains the version number °dONLNdÍ8-D⁄)Æ of the component. This should be°dONLNd DP≥(l6#identical to the value returned by     °dONLNd.E≥P)õGetComponentVersion °dONLNdADP)_. °dONLNdCDP⁄)+For convenience, if this value is set to 0,°dONLNdoP\\(x6Bthe component is called to get the version. This is useful during °dONLNd±P\\⁄(xzdevelopment. The version°dONLNd \hk(Ñ6number stored in °dONLNd€\kh})Sthe     °dONLNdfl]}hˇ)ComponentResourceExtension °dONLNd˘\ˇh⁄)Ç* is used by the Component Manager to avoid°dONLNd$htø(ê6Yhaving to load and call the Component to retrieve the Component’s version during startup.°dONLNd~Äå-*The     °dONLNdÇÅ-åõ)componentRegisterFlags °dONLNdòÄõå,)n  allow you to define additional °dONLNd∏Ä,å⁄)ë%register information. These flags are°dONLNdfiåòY(¥6 shown below.    °dONLNdϣƗ*%// Component Resource Extension flags°dONLNd≠∏6*
  171. enum {°dONLNd∑<¬“+$
  172. componentDoAutoVersion = 1<<0,°dONLNd:¡<Ë*
  173.  componentWantsUnregister = 1<<1,°dONLNd\À<÷ˇ*
  174. 'componentAutoVersionIncludeFlags = 1<<2°dONLNdÑ’‡"(¸6}; °dONLNdá͈0*The     °dONLNdãÎ0ˆû)componentDoAutoVersion °dONLNd°Íûˆº)n flag °dONLNdßͺˆ⁄)3tells the Component Manager that you only want your°dONLNd€ˆ@(6@Component registered if there is no later version available. If °dONLNdˆ@⁄(^ there is an older version of the°dONLNd<Ñ(*6IComponent installed, it will be unregistered. If an older version of the °dONLNdÖÑ⁄(*¢same Component°dONLNdî¿(66(attempts to register after you, it will °dONLNdº¿⁄)®;be immediately unregistered. Further, if a newer version of°dONLNd¯&(B61the same Component registers after you, you will °dONLNd    )&⁄)˘(automatically be unregistered. Using the°dONLNd    R&2{(N6Iautomatic version control feature of the Component Manager allows you to °dONLNd    õ&{2⁄(Nômake sure that only°dONLNd    Ø2>E(Z6    the most °dONLNd    ∏2E>⁄)-Precent version of your software is running on a given machine, regardless of how°dONLNd
  175.     >J¥(f6 many versions many be installed.°dONLNd
  176. *Vb-*The     °dONLNd
  177. .W-b•)componentWantsUnregister °dONLNd
  178. FV•b)x flag indicates that your °dONLNd
  179. `Vb⁄)q'Component wants to be called when it is°dONLNd
  180. àbnr(ä6unregistered. This °dONLNd
  181. õbrn⁄)ZIis useful if your component allocates global memory at register time, for°dONLNd
  182. Ânzƒ(ñ6Zexample. The prototype of the unregister message is identical to the register message. If °dONLNd ?nƒz⁄(ñ‚your°dONLNd DzÜQ(¢6
  183. component °dONLNd NzQÜ⁄)9Mhas never been opened, its unregister message will not be called. The routine°dONLNd úÜí»(Æ6'selector for unregister is given below. fl4fl˘
  184. *D14)
  185.  of 18(ÚëQuickTime 1.6 Tech Noteˇ»◊#ˇ ˇˇˇˇ#◊ 
  186. d,Times
  187. .+6,Developer Technical Support(,Ã
  188. April 1993 .4.˘ °dONLNd(-(D6The ,
  189. Courier    °dONLNd-(Õ) componentAutoVersionIncludeFlags °dONLNd$Õ(s)†" flag tells the Component Manager °dONLNdFs(⁄)¶to use the component°dONLNd[(4b(P6flags as criteria °dONLNdm(b4⁄)JNfor it's component search. If a component wants automatic version control, the°dONLNdº4@u(\6FComponent Manager has to search for similar components. Normally, the °dONLNd4u@⁄(\ìComponent Manager°dONLNd@L](h6only searches °dONLNd"@]L⁄)EKfor another component using the type, subType, and manufacturer fields of a    °dONLNdnMX|(t6ComponentDescription °dONLNdÇL|X†)d2 record. This flag tells the Component Manager to °dONLNd¥L†X⁄(tæ include the    °dONLNd¿Yd^(Ä6componentFlags °dONLNdŒX^dú)F in its search.    °dONLNdfip{«(ó6##define kComponentUnregisterSelect °dONLNdpÃ{€)¥ -7 °dONLNdÖëO(≠6Finally, the     °dONLNdÜOë©)7componentIconSuite °dONLNd&Ö©ë⁄)Z? field allows you to provide the resource id of a System 7 Icon°dONLNdfëù0(π6DSuite. If this field is 0, it indicates that there is no icon suite.°dONLNd¨µ!¡°+    $GetComponentIconSuite ‡=‡˘    °dONLNd¬√!Œä*GetComponentIconSuite °dONLNd◊¬äŒ£)i: returns an Icon Suite for the given Component. This call °dONLNd¬£Œ⁄(Í¡
  190. only works°dONLNdŒ!⁄ù(ˆ?Son System 7 or later. If called on System 6, it returns an error. If the Component °dONLNdoŒù⁄⁄(ˆª doesn’t have°dONLNd|⁄!Ê3(?an °dONLNd⁄3ÊÑ):Icon Suite but does have a Component Icon (as returned by     °dONLNdπ€ÑÊ‘(¢GetComponentInfo °dONLNd…⁄‘Ê⁄)P),    °dONLNdÃÁ!Úä(?GetComponentIconSuite °dONLNd·ÊäÚo)i1 creates an Icon Suite containing just the black °dONLNdÊoÚ⁄)Âand white Component°dONLNd&Ú!˛æ(?Icon. In this way, you can use     °dONLNdEÛæ˛')ùGetComponentIconSuite °dONLNdZÚ'˛Ö)i without regard to °dONLNdmÚÖ˛⁄)^whether or not a°dONLNd~˛!
  191. M(&?<Component has an Icon Suite or just simply a Component Icon.°dONLNdª!"r*BFor more details on Icon Suites, see the Tech Note on Icon Suites °dONLNd˝r"⁄(>ê(M.IM.IconDrawing),°dONLNd"!.Œ(J?!"Drawing Icons the System 7 Way".    °dONLNd3:!Eò*Kpascal OSErr GetComponentIconSuite(Component aComponent, Handle *iconSuite)°dONLNdP![S*
  192. aComponent°dONLNdäPÑ[o)c/Component id, retrieved with FindNextComponent.°dONLNd∫Z!eN(Å?    iconSuite°dONLNdƒZÑe[)c+Pointer to the icon suite you will receive. °dONLNdp!|C(ò?Errors    °dONLNd¯|!áû* invalidComponentID  -3000°dONLNd|®áM)á!Component reference is not valid.°dONLNd4®∫€(’6QuickTime 1.6 Bug Fixes Ÿ4Ÿ˘ °dONLNdL»‘Õ*YQuickTime 1.6 fixes all known bugs in QuickTime 1.5. Many of these bugs are listed below.°dONLNd¶‡Ïf*Movie Toolbox°dONLNd¥¯!¯+    +• The Movie Toolbox interesting time calls °dONLNdfl¯¯⁄)◊,have been substantially improved. The values°dONLNd * (,H/returned are much more consistant and accurate.°dONLNd<!(((D?•     °dONLNd>((d) GetMoviePict °dONLNdJd(Ò)< has two major improvements:    °dONLNdg)34o(PQ GetMoviePict °dONLNds(o4])<2  no longer fails on certain Compact Video movies.    °dONLNd¶53@o(\Q GetMoviePict °dONLNd≤4o@ò)<> now reports out of memory errors rather than returning empty °dONLNd4ò@⁄(\∂pictures when°dONLNd˛@3L|(hQmemory is low.°dONLNdX!d((Ä?•     °dONLNdY(dá)UpdateMovieResource °dONLNd"Xád/)_& has been fixed for single fork files.°dONLNdIp!|Ø(ò?X• Editing movie's with alternate tracks no longer causes duplicate tracks to be created. fl4fl˘
  193. (Ú6QuickTime 1.6 Tech Note(Ú÷15)
  194.  of 18ˇ§◊#ˇ ˇˇˇˇ#◊ 
  195. d,Times
  196. .+6,Macintosh Technical Notes .4.˘ °dONLNd!(_+    B• Movie Uncover Procedures have been significantly improved. If a °dONLNdB_(⁄(D}movie with tracks that are°dONLNd](*4?(PH7semi-transparent has a Movie Uncover procedure set (by ,
  197. Courier    °dONLNdî)?4ô(P]SetMovieCoverProcs °dONLNd¶(ô4µ)Z), the °dONLNd≠(µ4⁄)uncover°dONLNdµ4*@·(\H$procedure is now called before each °dONLNdŸ4·@⁄)∑2frame to fill/erase the background. Previously the°dONLNd @*Lø(hHMovie Toolbox performed the °dONLNd(@øL⁄)ï:erase, which limited a cover procedure aware application's°dONLNdcL*XP(tHoptions.°dONLNdld!p¯(å?*• The dialog sequence that appears when a °dONLNdñd¯p⁄)◊,movie data file is lost has been reworked to°dONLNd√p*|(òH6eliminate the "This is not a valid movie file" dialog.°dONLNd˙à!î°(∞?H• Fixed problem with deactivating and reactivating Compact Video movies °dONLNdBà°î⁄(∞ø that caused°dONLNdNî*†”(ºH"“shimmering” effects in the image.°dONLNdq¨!∏((‘?•     °dONLNds≠(∏Ç)GetMoviePosterPict °dONLNdÖ¨Ç∏,)Z# now properly handles tracks which °dONLNd®¨,∏⁄)™%are only in the poster and not in the°dONLNdŒ∏*ƒI(‡Hmovie.°dONLNd’–!‹fl(¯?'• Movies played in loop mode using the °dONLNd¸–fl‹⁄)æ2Movie Controller no longer briefly pause when they°dONLNd/‹*Ë)(H5jump from the end back to the beginning of the movie.°dONLNdeÙr(6Movie Controller°dONLNdv !É+    J• The Movie Controller performs much smarter drawing, so it takes up less °dONLNd¿ É⁄(4°time during movie°dONLNd“*$W(@H    playback.°dONLNd‹0!<∂(X?V• The Movie Controller no longer leaves the port clip changed after drawing the badge.°dONLNd3HTÜ(p6Movie Import/Export°dONLNdG`!lπ+    S• The Import AIFF Sound File to Movie component now always imports the entire file.°dONLNdõx!Ñì*• The PICT and PICS °dONLNdØxìÑ⁄)r=import components no longer scale down images larger than the°dONLNdÌÑ*êK(¨Hscreen.°dONLNdıú®Å(ƒ6Text Media Handler°dONLNd¥!¿ó+    • When multi-line text is °dONLNd"¥ó¿⁄)vCgrown, lines after line 1 were not displayed. The bug did not occur°dONLNdf¿*É(ËH'when grown exactly 2x. It is now fixed.°dONLNdéÿ!‰á(?• Empty text samples °dONLNd£ÿá‰⁄)fCsometimes caused the Text Media Handler to lose track of subsequent°dONLNdÁ‰*ù( Htext size. It is now fixed.°dONLNd¸!(($?•     °dONLNd˝(P)FindText °dONLNd¸Pw)(     did not °dONLNd¸w⁄)'Kdo "case insensitive" searches properly. Furthermore it tried to dispose of°dONLNdb*(0H4the text string that was passed in. It is now fixed.°dONLNdó !,((H?•     °dONLNdô!(,P)FindText °dONLNd° P,Ü)(@ "wrap around" search did not always work properly. It now does.°dONLNd‚8!D](`?C• Hilite text samples did not always display properly. They now do.°dONLNd&P!\Δ*"• If the track contained multiple °dONLNdHPΔ\⁄)•5text descriptions, performance was sometimes severely°dONLNd~\*h°(ÑHdegraded -- not anymore.°dONLNdót!Ä((ú?8• Text clipping and scrolling is now much more reliable.°dONLNd–åò∞(¥6Image Compression Manager°dONLNdͧ!∞%+    •°dONLNdϧ*∞?)    The     °dONLNd•?∞v) AlignWindow °dONLNd˚§v∞h)77 call has been fixed to respect vertical repositioning. fl4fl˘
  198. (Ú616)
  199.  of 18(ÚëQuickTime 1.6 Tech Noteˇ ˆ◊#ˇ ˇˇˇˇ#◊ 
  200. d,Times
  201. .+6,Developer Technical Support(,Ã
  202. April 1993 .4.˘ °dONLNd(4i(P6Compact Video°dONLNd@!L%+    •°dONLNd@*LÇ)    In some cases, the °dONLNd#@ÇL⁄)XFCompact Video compressor allowed the data rate to exceed the limit set°dONLNdjL*Xl(tHby the calling °dONLNdyLlX⁄)BIapplication, causing playback problems from CD.  QuickTime 1.6 fixes this°dONLNd√X*d?(ÄHbug.°dONLNd»p!|%(ò?•°dONLNd p*|)    ,Decompressing gray scale Compact Video data °dONLNdˆp|⁄)Ì'to an 8-bit color destination no longer°dONLNd|*àP(§Hcrashes.°dONLNd'î†ó(º6Photo CD Decompressor°dONLNd=¨!∏%+    •°dONLNd?¨*∏')    4More accurate colors in decompression are displayed.°dONLNdtƒ–ë(Ï6Standard Compression°dONLNdâ‹!Ë%+    •°dONLNdã‹*Ë5)    If ,
  203. Courier    °dONLNdé›5Ëô) scAllowZeroFrameRate °dONLNd¢‹ôË()d" is true, default to 0 frame rate.°dONLNd≈Ù!%(?•°dONLNd«Ù*ú)    JThe key frame rate now updates correctly when changed from hook procedure.°dONLNd !%(4?•°dONLNd *K)    >Rate-constrain item checked if non-zero default value present.°dONLNdS$0w(L6Sequence Grabber°dONLNdd<!H%+    •°dONLNdf<*H=)    8Sound wouldn’t get restarted or turned off correctly if °dONLNdû<=H⁄(d[ the record bit wasn’t set in its°dONLNdøH*Tπ(pHchannel usage. It is now fixed.°dONLNdfl`!l%(à?•°dONLNd·`*la)    DVideo panel does not bus error if the digitizer doesn't support hue.°dONLNd&xÑÜ(†6Component Manager°dONLNd8ê!ú}+    • The Component °dONLNdHê}ú⁄)\BManager no longer changes the current resource file when loading a°dONLNdãú*®d(ƒH
  204. Component.°dONLNdñ¥!¿*(‹?• °dONLNdò¥*¿⁄)    QThe Component Manager now tracks files using File ID's when possible, rather than    °dONLNdÍ¡*ÃH* FSSpec °dONLNd¿HÃR)'s.°dONLNdÙÿ!‰%(?•°dONLNdˆÿ*‰Ê)    &Fixed obscure boot problem that would °dONLNdÿʉ⁄)º/hang the machine when a component was called to°dONLNdL‰*Z( H>register and the system heap was extremely low on free memory.°dONLNdã¸!%($?•°dONLNdç¸*o)    It is now OK °dONLNdö¸o˚)Eto pass an empty handle to     °dONLNdµ˝˚K)åGetComponentInfo °dONLNd≈¸K⁄)P. This is helpful, since it can°dONLNdÂ*c(0H return them.°dONLNdÚ*6y(R6Further Reference: U4U˘°dONLNd7*C.+•°dONLNd7<Cé)Inside Macintosh°dONLNd7éC»)R , QuickTime°dONLNd#C*O.(kH•°dONLNd%C<Oé)Inside Macintosh°dONLNd5CéO)R, QuickTime Components fl4fl˘
  205. (Ú6QuickTime 1.6 Tech Note(Ú÷17)
  206.  of 18ˇ